Data Analysis/R

[R] tapply 함수 : 그룹별 합계 및 평균 구하기

AubreyJeong 2020. 7. 8. 00:13

tapply() :  Apply a Function Over a Ragged Array

"그룹별"로 각 자료값에 "함수를 적용"하는, apply 계열 함수 

→ 저장된 데이터를 주어진 기준에 따라 그룹으로 묶은 뒤, 각 그룹에 함수를 적용하고 그 결과를 (배열로) 반환한다

 

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

 

✔︎ X : 평균을 구할 변수 

✔︎ INDEX : 그룹 변수 - 데이터를 그룹으로 묶을 기준이 되는 index 

✔︎ FUN : 평균을 구할 함수 - 각 그룹마다 적용할 함수

 

 

[예제 1] 1부터 10까지의 수 중에서 3으로 나누었을 때 나머지가 1인 값

    [TRUE] 1 + 4 + 7 + 10 = 22 

    [FALSE] sum(1:10) - TRUE값 = 33

> tapply(1:10, 1:10 %% 3 == 1, sum)
FALSE  TRUE 
   33    22 

 

[예제 2] iris 데이터에서 Species 별로 Sepal.Length 의 평균과 분산구하기

# iris 데이터셋에 가지고 있는 데이터들의 간단히 확인
> iris
    Sepal.Length Sepal.Width Petal.Length Petal.Width    Species
1            5.1         3.5          1.4         0.2     setosa
2            4.9         3.0          1.4         0.2     setosa
3            4.7         3.2          1.3         0.2     setosa
4            4.6         3.1          1.5         0.2     setosa
5            5.0         3.6          1.4         0.2     setosa ....

# 데이터셋의 오브젝트 타입 확인하기 
> class(iris)
[1] "data.frame"

# 데이터프레임 안의 구조 확인 
> str(iris)
'data.frame':	150 obs. of  5 variables:
 $ Sepal.Length: num  5.1 4.9 4.7 4.6 5 5.4 4.6 5 4.4 4.9 ...
 $ Sepal.Width : num  3.5 3 3.2 3.1 3.6 3.9 3.4 3.4 2.9 3.1 ...
 $ Petal.Length: num  1.4 1.4 1.3 1.5 1.4 1.7 1.4 1.5 1.4 1.5 ...
 $ Petal.Width : num  0.2 0.2 0.2 0.2 0.2 0.4 0.3 0.2 0.2 0.1 ...
 $ Species     : Factor w/ 3 levels "setosa","versicolor",..: 1 1 1 1 1 1 1 1 1 1 ...

# iris 데이터에서 Species별로 Sepal.Length 의 평균과 분산구하기
> tapply(iris$Sepal.Length, iris$Species, mean)
    setosa versicolor  virginica 
     5.006      5.936      6.588 
> tapply(iris$Sepal.Length, iris$Species, var)
    setosa versicolor  virginica 
 0.1242490  0.2664327  0.4043429 

 

[응용]

# take a sample of means of 5 values
samp_mean_05 <- data.frame(
  income = tapply(sample(loans_income, 1000*5), 
                  rep(1:1000, rep(5, 1000)), FUN=mean),
  type = 'mean_of_5')

'Data Analysis > R' 카테고리의 다른 글

[R] 데이터 구조  (0) 2021.06.08
[R] 파일 불러오기  (0) 2021.06.08
[R] R 패캐지와 라이브러리  (0) 2021.06.06
[R] R 스튜디오 설치와 기본 환경 설정  (0) 2021.06.05
[R] rep() 함수  (0) 2020.07.06