[R] 데이터 프레임(Data Frame) 그룹합 계산하기 (feat. aggregate)

해당 포스트는 데이터 프레임(Data Frame)의 특정 컬럼을 기준으로 그룹 합계(Group Sum)을 계산하는 방법을 소개합니다.

data-frame-group-sum-in-r-using-aggregate

INTRO

R에서 그룹합(Group Sum)을 계산하는 경우는 집단별 합계, 성별 인원 합계, 연령대 소득 합계 등 다양합니다. 아래에서는 R에서 제공되는 다양한 그룹합(Group Sum) 함수들 중, 추가 설치 없이 사용 가능한 aggreate() 함수에 대해 설명하고 예시 데이터와 함께 간단한 풀이를 진행합니다.

aggregate?

aggregate()는 데이터를 하위 집합으로 분할하여, 각각에 대한 요약 통계를 계산하고 편리한 형식으로 결과를 반환해주는 함수입니다.

함수 사용법

aggregate(x, FUN, …, simplify = TRUE, drop = TRUE)
  • x : 입력 데이터(R 객체)
  • FUN : 모든 데이터 하위 집합에 적용할 수 있는 요약 통계를 계산하는 기능
  • simplify = TRUE : 가능한 경우 결과를 벡터 또는 행렬로 단순화해야 하는지 여부 (기본값 = TRUE)
  • drop = TRUE : 그룹화 값의 사용되지 않는 조합을 삭제할지 여부 (기본값 = TRUE)

자주 사용되는 집계 함수

  • sum() : 그룹화된 열의 합을 계산합니다.
  • mean() : 그룹화된 열의 평균을 계산합니다.
  • median() : 그룹화된 열의 중간값을 계산합니다.
  • max() : 그룹화된 열에서 최댓값을 찾습니다.
  • min() : 그룹화된 열에서 최솟값을 찾습니다.
  • count() : 그룹화된 열의 개수를 세어줍니다.

예시 문제 풀이

샘플 데이터 생성

샘플 데이터를 생성하기 위해 R의 내장 함수인 data.frame() 함수를 사용합니다. 아래의 코드를 실행하여 mydata라는 이름의 데이터 프레임을 생성합니다.

생성된 mydata라는 변수에는, A, B, C 의 컬럼에 각각 10, 20, 30 / 10, 10, 30 / 10, 10, 40 / 0, 10, 30이 입력된 데이터 프레임이 저장됩니다.

mydata <- data.frame(
  A = c(10, 10, 10, 0),
  B = c(20, 10, 10, 10),
  C = c(30, 30, 40, 30)
)
mydata
   A  B  C
1 10 20 30
2 10 10 30
3 10 10 40
4  0 10 30

aggregate로 그룹합 계산

mydata 데이터 프레임에서 A와 B 열을 기준으로 C 열의 값을 그룹화하고 합계를 계산해 보겠습니다. 이를 위해, R에서는 aggregate() 함수를 사용할 수 있습니다.

result <- aggregate(C ~ A + B, 
                    data = mydata, 
                    FUN = sum)
result


위 코드에서는 C열의 값(C)을 A와 B 열의 값(A, B)으로 그룹화한 후, 그룹화된 합계를 계산합니다. 결과적으로 result라는 데이터 프레임이 생성되며, 아래와 같은 값을 갖습니다.

   A  B  C
1  0 10 30
2 10 10 70
3 10 20 30

위 출력 결과를 보면, 첫 번째 열은 A 열의 값, 두 번째 열은 B 열의 값, 세 번째 열은 그룹화된 C 열의 합계 값을 담고 있습니다. 따라서, 첫 번째 행은 A=0, B=10일 때 C의 합계가 30임을 나타내고, 두 번째 행은 A=10, B=10일 때 C의 합계가 70임을 나타냅니다.

aggregate() 함수는 데이터를 그룹화하고 계산하는 작업을 쉽게 수행할 수 있도록 해줍니다. 이 함수는 데이터 분석 작업에서 자주 사용되며, 다양한 종류의 계산(예: 평균, 중간값, 최빈값 등)을 수행할 수 있습니다.

마무리

R은 데이터 분석을 위한 매우 유용한 도구입니다. 데이터 프레임, 함수, 패키지 등 다양한 기능을 제공하여 데이터 분석 작업을 쉽게 처리할 수 있습니다. 또한 R은 커뮤니티에서 다양한 패키지와 함수를 공유하고 있기 때문에 사용자들이 작업을 보다 쉽게 처리할 수 있도록 도와줍니다. aggregate() 함수는 그룹화된 데이터의 계산을 수행하는 데에 유용하며, 이를 통해 데이터 분석 작업에서 많은 시간을 절약할 수 있습니다.

관련 링크

[1] [R] 숫자 데이터 범위에 따라 그룹 지정하기 (feat. ifelse)
[2] [R] 특정 변수값에 맞춰 데이터 분할하기 (feat. MASS, Cars93)
[3] [R] 데이터를 컬럼(id) 기준으로 합치기 (Data concatenation by column)