R 데이터 조작 II
-
데이터 처리에 중요한 패키지
-
전처리 -> sqldf, plyr, reshape2, data.table, foreach
-
병렬처리 패키지 -> doMC
-
코드 테스트 -> testthat, browser(), system.time(), Rprof()
-
모두 필요하다
-
sqldf 패키지: SQL 명령이 주어지면 자동으로 스키마 생성, 테이블로 데이터 로딩, SQL문을 수행, 이후 다시 R로 로딩
-
sqldf(‘SQL명령문’)
-
ex) sqldf(‘select distinct Species from iris’)
-
iris내에 Sepal.Length의 평균을 구해보자
-
sqldf(“select avg(Sepal_Length) from iris where Species=’setosa’”)
-
SQL은 컬럼명에’.’이 들어갈 수 없어서 Sepal_Length로 적어야하고, 대소문자 구분이 없다.
-
iris내의 Species별 평균을 구해보자
-
sqldf(‘select Species, avg(Sepal_Length) from iris group by Species’)
-
plyr 패키지: 데이터를 분활(split),특정함수에 적용(apply), 그 결과를 조합(combine)하는 세단계를 처리하는 함수를 제공
-
입력값: 배열, 데이터프레임, 리스트
-
함수의 첫번째와 두번째자리의 의미: a: array, d: data.frame, l: list 중 (1) 입력값, (2) 출력값
-
함수
-
adply(): 입력값이 꼭 a일 필요가 없다. 숫자 색인으로 각 행이나 열을 읽을 수 있으면 됨
-
왜쓰나? apply()를 사용하면 output은 ‘행렬’로 결과를 변환해서 문자가 섞여있으면 모두 문자로 변환됨
-
ddply()
-
Species로 그룹지을 때, .(변수) <- 이렇게 사용
-
ex) ddply(iris, .(Species), function(sub){data.frame(Sepal.Length.mean)=mean(Sepal.Length))})
-
여러변수들로 그룹지을 때 -> .(변수, 변수)
-
ex) ddply(iris, .(Species, Sepal.Length > 5.0), function(sub){data.frame(Sepal.Length.mean=mean(Sepal.Length))})
-
m*ply()
-
데이터프레임 혹은 함수만 인자로 받아서 output을 바꾸는 함수
-
난수 생성해서 프레임에 추가하는 예제
-
ex) mdply(x, rnorm, n=2)
-
transform(), summaries(), subset(): plyr()패키지들과 함께 사용되는 함수들
-
transform(): 데이터프레임 내의 데이터를 수정하여 새로운 항목으로 추가할 때
-
ex) ddply(baseball, .(id), transform, cyear=min(year))
-
만일 두개 이상의 항목을 추가하고 싶다면 -> mutate()사용
-
ex) ddply(baseball, .(id), mutate, cyear, cyear1)
-
summarise(): 데이터를 조작하고 추가하고 싶은 컬럼을 새로운 데이터프레임에 넣어서 반환
-
ex) ddply(baseball, .(id), summarise, cyear= min(year))
-
subser(): 조건에 맞는 데이터를 추출
-
ex) ddply(baseball, .(id), g == max(g))
-
reshape2()
-
melt(): 데이터 변형
-
melt(인자, dataframe name)
-
ex) melt(id=1:4, french_fries)
-
id는 식별해주는 id, french_fries는 data.frame자료
-
NA값이 포함된 것을 지우고 싶을 때
-
rm.na =T
-
complete.cases(data.frame): 하나라도 NA가 있으면 FALSE, 하나도 없으면 TRUE를 반환
-
cast(): dcast/ acast -> d: data.frame/ a: vector, matrix, array
-
dcast(데이터명, formula)
-
ex) m <- melt(id=1:2, smiths)
-
ex) x <- dcast(m, subject + time ~ … )
-
identical(x, smiths) : 확인작업
-
id를 모두 안 써도 됨
-
ex) id = time만 써도 됨
-
data.table(): data.frame와 비슷한 구조
-
패키지이기 때문에 다운과 library필수
-
모든 내용을 print하지 않아 편리
-
하지만 내용을 충분히 보고 싶을때는 x[1:n,]을 사용해서 지정
-
데이터 프레임과 호환이 잘 되어 프레임이사용하는 함수는 웬만하면 사용 가능, 하지만 안될 시 as.data.frame()으로 변환해서 사용
-
data.table[행,표현식,옵션]으로 인덱싱
-
사용법 예시: as.data.table(iris), iris[1, Species]
-
주의할 점: 따옴표 사용 안함, data.frame은 사용함
-
옵션은 by를 사용
-
ex) iris_table[,Sepal.Length,by=Species]
-
setkey()
-
만일 어떤 조건을 줘서 그에 맞는 조건에 해당하는 행을 모두 출력할 때는 R은 모든 행을 훑고지나가면서 탐색한다. 이는 시간이 많이 걸리는 행위이기 때문에 미리 조건에 맞는 색인을 만들어 놓고 한다면 훨씬 수월 -> 이를 위해, key를 지정
-
사용법
-
setkey(데이터명, key로 설정할 column)
-
ex) setkey(dt1, x)
-
dt1[dt2,]: dt1에서 x를 key로 설정했기 때문에 이에 대응되는 dt2의 컬럼을 dt1에 추가해서 보여줌
-
datatable1[x=13,list(x_mean=mean(x),x_std=s\d(x))]: datatable1의 x값이 13인 애들만 search하고 y의 평균 구해라
-
merge()사용 가능 -> 속도 느림
-
참조를 이용한 데이터 수정
-
사용법: dt[i,변수명 := 값]
-
rbindlist
-
plyr패키지에 ldply()가 llply()보다 느리다.
-
rbindlist()는 llply()로 계산결과를 리스트로 반환해서 이를 list를 묶어 데이터프레임으로 변환하는 것
-
doMC: 멀티코어를 사용해서 병렬 컴퓨팅을 하는 것
plyr(), foreach()함수를 사용해서 가능
'R > 기초' 카테고리의 다른 글
R 새로운 종류의 Plot (0) | 2019.08.13 |
---|---|
R 데이터 plot 함수 (0) | 2019.08.13 |
R 데이터 조작 I (0) | 2019.08.12 |
R에서 사용하는 제어문, 함수, 그에따른 연산 (0) | 2019.08.12 |
R에서 사용하는 변수 (0) | 2019.08.12 |