본문 바로가기
R Programming/dplyr 패키지

group_by( ) 와 summarise( ) 함수: 그룹별 요약

by 블루드래곤 2022. 8. 11.
728x90

데이터 분석 과정에서 월별, 주별 등 그룹별 평균이나 빈도를 계산할 때 group_by( )와 summarise( )함수를 효율적으로 사용할 수 있다. 특히, summarise( ) 함수는 전체 데이터에서 각 변수 혹은 케이스의 값을 요약할 때 사용하기보다는 group_by( ) 함수와  조합해 그룹별 요약 값을 효율적으로 계산할 때 많이 사용하고 있다. 구체적인 계산방법은 아래 예시와 같다.

출처: https://rstudio-education.github.io/tidyverse-cookbook/images/dplyr-group_by.png

 

Case 1: summarise( ) 함수를 활용한 각 변수 요약 값 계산

  • 예시: Ozone 변수의 평균을 계산해 Ozone maen이라는 변수명을 할당하여 출력할 경우
  • Ozone 변수는 결측치를 포함하므로 이를 제외하고 계산하기 위해 na.rm = TRUE를 지정함.
> airquality %>% summarise(Ozone_mean = mean(Ozone, na.rm = TRUE))

  Ozone_mean
1   42.12931

 

Case 2: 단일 그룹별 요약 통계량 계산

  • group_by( ) 함수에 변수를 지정하면 변수 그룹별로 데이터를 분리함.
  • group_by( ) 함수로 분리한 데이터에 summarise( ) 함수를 조합하면 그룹별 요약 통계량을 계산할 수 있음.
  • 예시: Month별  Ozone 변수의 평균을 계산할 경우
> airquality %>% 
+   group_by(Month) %>% 
+   summarise(Ozone_mean = mean(Ozone, na.rm = TRUE))

# A tibble: 5 x 2
  Month Ozone_mean
  <int>      <dbl>
1     5       23.6
2     6       29.4
3     7       59.1
4     8       60.0
5     9       31.4

 

Case 3: 여러 그룹별 요약 통계량 계산

  • mutate( ) 함수로 여러 파생변수를 동시에 추가했던 것과 마찬가지로 summarise( ) 함수를 사용하여 여러 요약 통계량을 동시에 계산할 수 있음.
  • 예시: Month별  Ozone 변수의 평균, 합계, 중앙값, 빈도를 계산할 경우
  • n( ) 함수는 각 그룹의 케이스(행)의 빈도를 계산하기 때문에 다른 함수와 달리 괄호 안에 변수를 지정하지 않음.
> airquality %>% 
+   group_by(Month) %>% 
+   summarise(Ozone_mean = mean(Ozone, na.rm = TRUE),
+             Ozone_sum = sum(Ozone, na.rm = TRUE),
+             Ozone_median = median(Ozone, na.rm = TRUE),
+             Ozone_freq = n())

# A tibble: 5 x 5
  Month Ozone_mean Ozone_sum Ozone_median Ozone_freq
  <int>      <dbl>     <int>        <dbl>      <int>
1     5       23.6       614           18         31
2     6       29.4       265           23         30
3     7       59.1      1537           60         31
4     8       60.0      1559           52         31
5     9       31.4       912           23         30

 

<참고자료> summarise( ) 함수에서 자주 사용하는 함수 요약표

함수명 기능
mean( ) 평균
sum( ) 합계
min( ) 최소값
max( ) 최대값
 sd( ) 표준편차
midian( ) 중앙값
n( ) 빈도

 

댓글