[R 기초] 데이터 다루기(2) - apply 함수
2020. 10. 24. 19:25ㆍ노트/R : 통계
# 데이터 생성
subject_name <- c("John","Jane","Steve")
temp <- c(37,35,33)
flu_status <- c(TRUE,FALSE,FALSE)
temp
# [1] 37 35 33
temp[2:3] # [1] 35 33
temp[-2] # [1] 37 33
temp[c(TRUE,FALSE,TRUE)] # [1] 37 33
#factor : 명목형 데이터를 표현
gender<-factor(c("M","F","M"))
gender
blood <- factor(c("O","AB","A"),
levels = c("O","AB","A","B"))
blood
factor(c("A","F","C"),
levels = c("A","B","C","D","F"),
ordered=TRUE)
# 리스트: 순서 x , 타입이 다양
sbl<-list(fn= subject_name[1],
temp= temp[1],
flu = flu_status[1])
sbl
sbl$fn # [1] "John"
class(sbl[1]) # [1] "list"
class(sbl[[1]]) # [1] "character"
sbl[c("temp","flu")]
df <- data.frame(sbl,stringAsFactors = FALSE)
#StringAsFactors : 팩터형으로 문자열을 읽을 것인가?
str(df)
apply 계열 함수
: 함수 연산을 특정 단위로 쉽게 할 수있도록 지원해주는 함수
- for, while (소규모 데이터 반복 연산 )
- apply (대규모 데이터 반복 연산)
데이터
iris_num <- NULL
iris
class(iris) # [1] "data.frame"
str(iris)
iris 데이터에서 numeric 데이터만 추출하고 싶을때
방법1. for문 이용
ncol(iris) # columns의 갯수 확인
# [1] 5
for ( x in 1:ncol(iris)){
if(is.numeric(iris[,x])) # sample data가 numeric인지?
iris_num <-cbind(iris_num,iris[,x]) # columns 연결
}
class(iris_num) # [1] "matrix"
iris_num <- data.frame(iris_num)
class(iris_num) #[1] "data.frame"
방법2. sapply 이용
iris_num <- iris[,sapply(iris,is.numeric)]
class(iris_num) # [1] "data.frame"
iris_num <- iris[1:10, 1:4]
set.seed(123) # 난수 시드값 설정
idx_r <- sample(1:10,2) # 실행할 때마다 1~10까지 임의의 숫자 2개 추출
idx_c <- sample(1:4,2)
idx_r # [1] 3 10
idx_c # [1] 3 4
for (i in 1:2){
iris_num[idx_r[i], idx_c[i]]<-NA
}
iris_num
apply: 행(1) 또는 열(2) 단위 연산(MARGIN)
입력 : 배열, 매트릭스 (같은 변수 형으로 )
출력 : 매트릭스 또는 벡터
apply(iris_num, 1 , mean)
apply(iris_num, 2 ,mean,na.rm=T)
apply(iris_num,2, function(x){x*2+1}) # 함수 정의
apply(iris_num, 2, function(x){median(x*2+1, na.rm=T)})
lapply: list+apply => 실행결과가 list로 출력
* 데이터 프레임 : 모든 변수가 벡터형태여야 함
변수의 type이 같아야함
class(apply(iris_num,2,mean,na.rm=T)) # [1] "numeric"
class(lapply(iris_num,mean,na.rm=T))
# [1] "list"
sapply: lapply와 비슷하나 간단하게 기술가능하고, 연산 결과가 벡터로 나옴(길이가 다른 경우 리스트로)
class(sapply(iris_num,mean, na.rm=T))
# [1] "numeric": vector
class(sapply(iris_num, mean, na.rm=T, simplify = F))
# [1] "list"
vapply: sapply + 탬플릿 지정 가능
fivenum : 5가지 요약 수치 만들어주는 함수
- 최솟값, 1사분위수, 중위값, 3사분위수, 최댓값
sapply(iris_num, fivenum)
vapply(iris_num, fivenum, c("Min."=0,"1st."=0,"Med."=0,"3rd."=0,"Max."=0))
'노트 > R : 통계' 카테고리의 다른 글
[분류] Apriori 라이브러리를 이용한 장바구니 분석 하기 (0) | 2020.11.16 |
---|---|
[분류] KNN 알고리즘을 이용한 데이터 분류하기 (0) | 2020.10.24 |
[R 기초] ggiraphExtra 패키지를 이용한 인터렉티브 시각화 (0) | 2020.10.24 |
[시계열] R에서 ARIMA 모델을 이용한 시계열 분석 (0) | 2020.10.23 |
[R 기초] ggplot2 라이브러리를 이용한 데이터 시각화 (0) | 2020.10.18 |