R apply 함수 Start.
BioinformaticsAndMe
# R apply() Function
- apply() : 데이터프레임 또는 매트릭스에 함수를 적용하여 행 또는 열 단위의 계산 수행.
apply( X, MARGIN, FUN)
- X : matrix
- MARGIN : 1(row) , 2(col)
- FUN : row/column 단위로 적용할 함수. 사용자가 만든 함수도 가능함.
EX1) apply(X, 1, sum)
EX2) apply(X, 2, sd)
# apply() 함수는 벡터, 행렬 등의 데이터 프레임에서 row/column 단위의 계산을 할 때 함수를 쉽게 적용할 수 있도록 도와준다.
# 실습데이터
> weight <- c(65.4, 55, 380, 72.2, 51, NA)
> height <- c(170, 155, NA, 173, 161, 166)
> gender <- c("M", "F","M","M","F","F")
> testDate <- c("2013/09/01", "2013/09/01", "2013/09/05", "2013/09/14", "2013/10/11", "2013/10/26")
> patients <- data.frame( weight = weight, height=height, gender=gender, testDate=testDate)
# weight, height만 추출
> patients.sub <- patients[ ,c("weight","height")]
> patients.sub
weight height
1 65.4 170
2 55.0 155
3 380.0 NA
4 72.2 173
5 51.0 161
6 NA 166
# 각 환자(row)별로 몸무게와 키의 평균을 구한다
> apply(patients.sub, 1, mean)
[1] 117.7 105.0 NA 122.6 106.0 NA
# NA(결측치)는 빼고 계산한다
> apply(patients.sub, 1, mean, na.rm=TRUE)
[1] 117.7 105.0 380.0 122.6 106.0 166.0
# 각 특성(Column)별로 평균을 구한다
> apply(patients.sub, 2, mean, na.rm=TRUE)
weight height
124.72 165.00
# 각 셀에 2를 곱해준다
MulTwo <- function(x){ return(2*x) }
> apply(patients.sub, c(1,2), MulTwo)
weight height
[1,] 130.8 340
[2,] 110.0 310
[3,] 760.0 NA
[4,] 144.4 346
#다양한 apply 함수군이 존재한다.
lapply: 결과를 리스트 형태로 반환
sapply: 벡터, 또는 행렬의 형태로 반환 (s: simplify)
tapply: 입력값을 index에 지정한 factor 값으로 분류(그룹화)하여 매개변수로 넘어온 function을 적용하는 함수다.
# lapply
> lapply( patients.sub, mean, na.rm = TRUE )
$weight
[1] 124.72
$height
[1] 165
# sapply
> sapply( patients.sub, mean, na.rm = TRUE )
weight height
124.72 165.00
# tapply
> patients$gender # categorical data
[1] M F M M F F
Levels: F M
> tapply(patients$weight, patients$gender, mean, na.rm=TRUE)
F M
53.0000 172.5333
R apply 함수 End.
BioinformaticsAndMe
'R' 카테고리의 다른 글
R plot (그래픽스) (0) | 2018.08.27 |
---|---|
R 회귀분석 (R regression test) (0) | 2018.08.19 |
R 상관분석 (R correlation test) (0) | 2018.08.10 |
막대그래프 (Barplot) (0) | 2018.08.06 |
R, 결측치 처리 (Missing value, NA) (0) | 2018.07.26 |