/*
* http://sosal.kr/
* made by so_Sal
*/
apply() 함수는 벡터, 행렬 등의 데이터 프레임에서 row/column 단위의 계산을 할 때 함수를 쉽게 적용할 수 있도록 도와준다.
apply 함수 외에 리스트, 벡터, 테이블 형태로 결과를 반환해주는 lapply, sapply, tapply 함수에 대해 알아보자.
실습데이터)
> 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)
> 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
[5,] 102.0 322
[6,] NA 332
lapply: 결과를 리스트 형태로 반환
sapply: 벡터, 또는 행렬의 형태로 반환 (s: simplify)
tapply: 입력값을 index에 지정한 factor 값으로 분류(그룹화)하여 매개변수로 넘어온 function을 적용하는 함수다.
> lapply( patients.sub, mean, na.rm = TRUE )
$weight
[1] 124.72
$height
[1] 165
> sapply( patients.sub, mean, na.rm = TRUE )
weight height
124.72 165.00
tapply( data, Index, function .. )
이는 index에 넘어온 level에 대해 그룹화 하는데, sql의 group by와 유사한 기능을 가진다.
> 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
'IT기술 관련 > 빅데이터 관련' 카테고리의 다른 글
[R 프로그래밍] 두개의 문자열 합치기 (0) | 2016.04.25 |
---|---|
[R 프로그래밍] apply, lapply, sapply, tapply, mapply, by (0) | 2016.04.23 |
[R 프로그래밍] [R] 몫과 나머지 (quotient and remainder) (0) | 2016.04.19 |
[Rstudio] Rstudio (치명적 오류: 접근 거부 - Fatal error: access denied) 해결 (3) | 2016.03.14 |
[R 프로그래밍] R의 데이터 구조 (0) | 2016.02.23 |