본문 바로가기

[2016 - 2019] 학부 정리/4학년

[4학년 - 빅데이터기술] R프로그래밍

apply 계열 함수들

apply( )  

lapply( ) 

 적용 : 배열, 행렬 (벡터 적용 안됨!)

 결과 : 벡터, 배열, 리스트

 방향 : 1-행, 2-열 / apply(data, 방향, 함수)

 

 # sum 함수

  sum(1:10)


 # matrix 행렬

  d <- matrix(1:9, ncol = 3)

  d


 #행렬에 sum함수 적용

  apply(d, 1, sum)

  apply(d, 2, sum)


 #iris 데이터 이용 

  head(iris)

  apply(iris[,1:4], 2, sum)


 # 위에랑 같음, colSums 많이 사용

  colSums(iris[, 1:4])


 # 컬럼이 1개일 경우 그냥 sum함수에 적용

  sum(iris[,2])




 적용 : 벡터, 리스트

 결과 : 리스트

 lapply(x, 함수) / x : 벡터, 리스트, 데이터 프레임

 

 #입력은 벡터 형태, 출력은 리스트 형태

 result <- lapply(1:3, function(x){x*2})

 result

 

 #출력을 벡터로 변환

 unlist(result)


 # 입력이 리스트 형태

 x <- list(a=1:3, b=4:6)

 

 # 입력이 프레임 형태

 lapply(iris[, 1:4], mean)


 # 리스트를 데이터 프레임으로 변환

 # unlist를 통해 벡터로 변환, matrix를 통해 변환은 as.data.frame으로 프레임 변환

 >q<-as.data.frame(matrix(unlist(lapply(iris[,1:4], mean)), ncol = 4,  byrow = T))

 >names(q) <- names(iris[,1:4])

 >q


 # do.call이용

 # matrix, unlist 대신 do.call과 cbind이용!

 data.frame(do.call(cbind,lapply(iris[,1:4],mean)))

sapply( )  

tapply( )  ?????

 적용 : 벡터, 리스트
 결과 : 벡터, 행렬, 배열
 lapply( )와 유사

 

 # lapply와 비슷하지만 결과가 list가 아님

 x<-sapply(iris[,1:4], mean)
 

 # 결과를 as,data.frame으로 바꾸기 위해서는 전치행렬 필요

 as.data.frame(t(x))
 y<-sapply(iris[,1:4], function(x){x>3})
 y

 head(y) 



 적용 : 벡터 데이터를 특정 기준으로 묶은 후 함수 적용

 결과 : 함수 적용한 결과가 반환


 # tapply(데이터, 색인, 함수)

 # 1부터 10까지의 숫자가 있고 이들이 모두 한 그룹에 속해 있을때 각 그룹에 속한 데이터의 합

 tapply(1:10, rep(1, 10), sum)


 # 짝수, 홀수별의 합

 tapply(1:10, 1:10 %% 2 == 1, sum)


 # iris데이터에서 Species별 Sepal.Length의 평균

 tapply(iris$Sepal.Length, iris$Species, mean)



 maaply( )  

 적용 : 여러개의 백터, 여러개의 리스트

 결과 : 여러 데이터를 함수의 인자로 적용 

 sapply( )의 확장된 버전