R 열 통계, 그룹별 집계

  • R

R에서 단일 열에 대한 통계치를 계산한다거나, group_by를 활용하여 특정 기준에 따라 집계하는 방법을 알아본다.


특정 열에 대한 통계치 (summarize)

dplyr의 함수인 summarize()를 활용하면 단일 열을 계산할 수 있다. summarize()는 계산된 값을 데이터프레임의 형태로 하나 돌려준다.

df %>%
  summarize(var_name = command(column_name))

여기서 command()는 내가 집계하고자 하는 방법이다.

  • sum() : 합계
  • mean() : 평균
  • median() : 중앙값
  • sd() : 표준편차
  • var() : 분산
  • min() : 최소값
  • max() : 최대값
  • IQR() : Q₃ − Q₁
  • n_distinct() : 고유값의 개수

그리고 데이터프레임을 돌려주기 때문에 내가 알고 싶은 값이 저장될 열 이름을 ‘var_name’와 같이 적어주어야 한다.

예시를 살펴보자.

예를 들어 df라는 데이터프레임에서 age이라는 열의 평균(mean)을 알고 싶다면 이렇게.

df %>% summarize(mean_age = mean(age))

만약 city라는 열에 도시 이름들이 문자열로 들어가있을 때 고유값의 개수(n_distinct)를 알고 싶다면 이렇게.

df %>% summarize(n_distinct_city = n_distinct(city))

결측치 처리 (na.ra)

summarize()를 사용할 때는 결측치를 주의해야 한다. 만약 최대값을 구하기 위해 그냥 이렇게 썼다고 해보자.

df %>%
  summarize(max_price = max(price))

만약 결측치가 있다면 NA가 반환된다. 그래서 결측치를 무시하고 구하려면 na.rm = TRUE를 적어줘야 한다. 이렇게.

df %>%
  summarize(max_price = max(price, na.rm = TRUE))

특정 열 값을 기준으로 그룹별 집계 (group_by)

특정 열을 기준으로 데이터프레임을 요약해서 봐야할 경우가 많다. 흔히 말하는 피벗(pivot)테이블을 만들고 싶을 때. dplyr의 group_by() 함수를 사용하면 된다. 사용법은 아래와 같다.

df %>%
  group_by(column_1) %>%
  summarize(aggregate_name = command(column_2))

group_by(), summarize()를 연달아 적용해서 해결했다.

group_by() 괄호 안에는 열 이름을 여러개 넣어줘도 된다. 집계하는 기준을 여러개 적용, 일종의 계층을 나눠서 집계하게 된다.

일단 예시를 보자.

열 1개를 기준으로

만약 이런 데이터프레임이 있을 때

student 열을 기준으로 grade의 평균값을 구하고 싶다면

grades <- df %>%
  group_by(student) %>%
  summarize(mean_grade = mean(grade))

잘 된다.

열 여러 개를 기준으로

만약 이런 데이터프레임이 있을 때

location, day_of_week 라는 2개의 열을 기준으로 sales의 평균값을 구하고 싶다면

df %>%
  group_by(location,day_of_week) %>%
  summarize(mean_total_sales = mean(total_sales))

쉽다. 그냥 groupby() 괄호 안에 집계의 기준이 되는 열 이름만 여러개 써주면 된다.

n()으로 개수 확인하기

위에서 언급한 함수들(mean()median()sd()var()min()max()IQR(), n_distinct()) 외에도 n()이라는 함수를 사용할 수 있는데, n()은 그룹 내 행 개수를 반환하며, 괄호 안에 열 이름을 따로 넣어줄 필요가 없다.

이렇게 쓰면 된다.

grades <- df %>%
  group_by(student) %>%
  summarize(count = n())

어렵지 않다.

*** 팁

filter(), mutate()groupby()와 함께 사용하면 특정 기준으로 데이터를 필터링 하거나 새로운 계산 값을 쉽게 만들어낼 수 있다.


일단 오늘은 여기까지만.

추천 글


댓글 남기기