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에서 기술 통계를 계산하는 방법