데이터 분석/R 데이터 처리 & 분석

[R] sapply 함수 사용법 & 활용하기

love R 2020. 7. 9. 00:37
반응형

sapply 함수는 apply 계열의 함수로서 R만의 특징이 반영된 함수입니다. 만약 어떤 기능을 반복적인 처리할 시 매우 편리한 함수입니다. 예를 들어, 데이터셋에 포함된 결측치를 0으로 대체한다든지 또는 열별로 평균이나 합계를 구하는 것 등 각 변수별로 적용할 필요없이 간단한 코드를 돌리는 것만으로도 전체 데이터셋에 반영됩니다. 변수가 두세 개 정도일 때는 별 문제가 안되지만 수십, 수백개일 때는 각 변수별로 처리하는 것은 굉장히 비효율적일 것입니다. R에서는 for문과 같이 전통적으로 쓰이는 반복문도 쓸 수 있지만 sapply 함수처럼 벡터별 처리를 하는 함수를 이용하면 더 효율적으로 코드를 구성할 수 있습니다.

 

 

 

 

1. 열 별로 평균을 계산하는 방법

 

f 라는 이름의 데이터셋을 생성 후에 열별 평균을 계산할 수 있습니다.

여기서 알아낼 수 있는 건  sapply를 데이터프레임에 적용할 때, 특정 함수를 열별로 적용되는 기능이 있다는 것입니다.

같은 방식으로 합계를 계산하고 싶다면, mean 대신에 sum을 쓰면 됩니다.

> f <- data.frame(x=c(1,2,3),y=c(7,5,2),z=c(3,7,6))
> sapply(f, function(x) mean(x))
     x    y    z 
2.00 4.67 5.33 

 

 

 

 

2. 데이터셋에 결측치가 포함된 경우 결측치를 0으로 대체하는 방법

 

실습을 위해 결측치(NA)를 포함한 데이터셋을 만듭니다.

> na_test <- data.frame(var1=c(3,4,NA),var2=c(5,NA,3),var3=c(NA,4,5))
> na_test
   var1 var2 var3
1    3    5   NA
2    4   NA    4
3   NA    3    5

 

 

 

sapply 함수의 첫번째 인자는 적용될 대상입니다.

두번째 인자는 첫번째 인자에 적용될 함수를 씁니다.

 

is.na 함수는 결측치를 검색해주는 함수입니다.

반환값은 논리형태의 벡터(logical vector)이며 TRUE이면 해당 위치에 결측치를 포함하고 있다는 뜻입니다.

 

ifelse 함수는 첫번째 인자로 특정 조건을 입력하고

두번째 인자는 조건이 사실일 경우 반환되는 값을 입력하고,

세번째 인자는 조건이 거짓인 경우 반환되는 값을 입력합니다.

 

sapply 함수의 결과값은 행렬 형태로 나옵니다.

따라서  as.data.frame() 함수를 사용하여 행렬을 데이터프레임으로 형변환합니다.

> test.f <- sapply(na_test, function(x) ifelse(is.na(x),0,x))   
> as.data.frame(test.f)
  var1 var2 var3
1    3    5    0
2    4    0    4
3    0    3    5

 

 

3. 반복문처럼 쓰기

sapply 함수는 반복문처럼 쓸 수도 있습니다. 일반적인 반복문을 쓰는 것과 같은 결과라도 더 간결하게 코드를 구성할 수 있습니다. 

예를 들어, 숫자벡터를 생성하고 2를 곱하여 새로운 벡터를 생성합니다.

먼저 for문을 이용해서 결과를 보겠습니다. (혹시 for문을 이용해서 코드를 더 간결하게 나타낼 수 있는 방법이 있다면 댓글로 달아주시기 바랍니다)

result <- c()
for(i in 1:10){
  result2 <- i*2
  result<- c(result,result2)
}
> result
 [1]  2  4  6  8 10 12 14 16 18 20

 

 

아래와 같이 sapply 함수를 사용하면 위와 같은 결과가 나오는 것을 볼 수 있습니다.

한 눈에 봐도 코드가 더 간결하고, 어떤 기능을 하는지 더 쉽게 와닿습니다.

#숫자벡터 생성
> test <- sapply(1:10, function(x) x*2)
> test
[1]  2  4  6  8 10 12 14 16 18 20

 

apply 계열의 함수는 R만의 특징을 잘 반영한 함수이기 때문에 잘 익혀두면 많은 도움이 될 것입니다.

반응형