18.4 tapply() 함수

tapply() 함수는 벡터의 하위 집합에 함수를 적용하는 데 사용됩니다. 주로 다음과 같은 상황에서 사용됩니다.

  1. (범주형 변수 즉, 일명 요인을 통해) 그룹으로 나누어 질 수있는 데이터 세트의 경우입니다.
  2. 데이터 세트를 그룹으로 나누고 싶은 경우 입니다.
  3. 각 그룹 내에서 함수를 적용하고 싶습니다.

tapply() 함수의 형식은 다음과 같습니다.

tapply(X, INDEX, FUN = NULL, ..., default = NA, simplify = TRUE)

  • x : 벡터입니다.
  • INDEX : 요인 또는 요인의 리스트(또는 강제 변환된 요인)입니다.
  • FUN : 적용할 함수입니다.
  • ... : FUN에 전달될 다른 인수가 포함되어 있습니다.
  • simplify : 결과의 단순화 여부를 설정합니다.

R에 내장된 mtcars 데이터 세트를 사용하고 cyl 변수로 그룹화된 mpg 변수의 평균을 계산하는 것을 예로 들어 보겠습니다.

# mtcars 데이터 세트의 앞의 6개 행을 확인합니다.
head(mtcars)
##                    mpg cyl disp  hp drat    wt  qsec vs am gear carb
## Mazda RX4         21.0   6  160 110 3.90 2.620 16.46  0  1    4    4
## Mazda RX4 Wag     21.0   6  160 110 3.90 2.875 17.02  0  1    4    4
## Datsun 710        22.8   4  108  93 3.85 2.320 18.61  1  1    4    1
## Hornet 4 Drive    21.4   6  258 110 3.08 3.215 19.44  1  0    3    1
## Hornet Sportabout 18.7   8  360 175 3.15 3.440 17.02  0  0    3    2
## Valiant           18.1   6  225 105 2.76 3.460 20.22  1  0    3    1
# cylinders를 그룹화하여 mpg 컬럼의 평균을 구합니다.
tapply(mtcars$mpg, mtcars$cyl, mean)
##        4        6        8 
## 26.66364 19.74286 15.10000

이제 cylinder 범주형 변수로 그룹화된 mtcars 데이터 세트의 열에 대한 평균을 계산해 보겠습니다. 이를 위해 apply 함수 내에 tapply 함수를 포함할 수 있습니다.

# cylinders를 그룹화하여 모든 컬럼의 평균을 구합니다.
apply(mtcars, 2, function(x) tapply(x, mtcars$cyl, mean))
##        mpg cyl     disp        hp     drat       wt     qsec        vs
## 4 26.66364   4 105.1364  82.63636 4.070909 2.285727 19.13727 0.9090909
## 6 19.74286   6 183.3143 122.28571 3.585714 3.117143 17.97714 0.5714286
## 8 15.10000   8 353.1000 209.21429 3.229286 3.999214 16.77214 0.0000000
##          am     gear     carb
## 4 0.7272727 4.090909 1.545455
## 6 0.4285714 3.857143 3.428571
## 8 0.1428571 3.285714 3.500000