A: aggregate()를 사용하고 na가 있는 행을 삭제하지 않는 방법


R의 Aggregate() 함수를 사용하여 데이터 프레임의 변수에 대한 요약 통계를 계산할 수 있습니다.

기본적으로 Aggregate() 함수는 하나 이상의 NA 값이 있는 데이터 프레임의 행을 발견하면 계산을 수행할 때 단순히 행을 제거합니다.

이로 인해 계산을 수행할 때 예상치 못한 결과가 발생할 수 있습니다.

이 동작을 방지하려면 Aggregate() 함수에서 na.action=NULL 인수를 사용할 수 있습니다.

다음 예에서는 이 인수를 실제로 사용하는 방법을 보여줍니다.

예: R에서 aggegate()를 사용하고 NA가 있는 줄을 삭제하지 마세요.

서로 다른 팀의 농구 선수들의 포인트와 어시스트를 보여주는 다음과 같은 데이터 프레임이 R에 있다고 가정해 보겠습니다.

 #create data frame
df <- data. frame (team=c('A', 'A', 'A', 'A', 'A', 'B', 'B', 'B', 'C', 'C'),
                 points=c(5, 9, 12, 14, 14, 13, 10, 6, 15, 18),
                 assists=c(NA, 4, 4, 5, 3, 6, 8, 4, 10, NA))

#view data frame
df

   team points assists
1 to 5 NA
2 to 9 4
3 to 12 4
4 to 14 5
5 A 14 3
6 B 13 6
7 B 10 8
8 B 6 4
9 C 15 10
10 C 18 NA

이제 팀별 로 그룹화된 포인트어시스트 의 합계를 계산하기 위해 Aggregate() 함수를 사용한다고 가정해 보겠습니다.

 #attempt to calculate sum of points and assists, grouped by team
aggregate(. ~ team, data=df, FUN=sum, na. rm = TRUE )

  team points assists
1 A 49 16
2 B 29 18
3 C 15 10

결과에는 팀당 포인트와 어시스트의 합이 표시되는 것으로 보이지만 실제로는 이러한 계산을 실행할 때 NA 값이 있는 행이 제거되었습니다.

원본 데이터 프레임을 보고 Team C의 포인트 열에 두 개의 값이 있는 것을 확인하면 이를 확인할 수 있습니다.

  • 15
  • 18

따라서 C팀은 총 33점을 얻어야 하는데 결과는 15점밖에 나오지 않습니다.

이는 포인트 값이 18인 행의 어시스트 열에 NA 값이 있기 때문입니다. 즉, 팀의 포인트 합계 대 팀 포인트 합계를 계산할 때 이 행이 실제로 사용되지 않았음을 의미합니다.

계산을 수행할 때 NA 값이 있는 행이 제거되지 않도록 하려면 다음과 같이 na.action=NULL 인수를 사용해야 합니다.

 #calculate sum of points and assists, grouped by team (don't drop NA rows)
aggregate(. ~ team, data=df, FUN=sum, na. rm = TRUE , na. action =NULL)

  team points assists
1 A 54 16
2 B 29 18
3 C 33 10

Aggregate() 함수는 이번에는 33에 해당하는 팀 C의 포인트 값 합계를 올바르게 반환합니다.

참고 : na.rm=TRUE 인수는 특정 열에서 계산을 수행할 때 NA 값을 무시 하도록 지정합니다.

추가 리소스

다음 튜토리얼에서는 R에서 다른 일반적인 작업을 수행하는 방법을 설명합니다.

R에서 summary() 함수를 사용하는 방법
R에서 그룹당 평균을 계산하는 방법
R에서 기술 통계를 계산하는 방법

의견을 추가하다

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다