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 |