R  데이터 조작 II

 

  1. 데이터 처리에 중요한 패키지

    1. 전처리 -> sqldf, plyr, reshape2, data.table, foreach

    2. 병렬처리 패키지 -> doMC

    3. 코드 테스트 -> testthat, browser(), system.time(), Rprof()

    4.  모두 필요하다

  2. sqldf 패키지: SQL 명령이 주어지면 자동으로 스키마 생성, 테이블로 데이터 로딩, SQL문을 수행, 이후 다시 R로 로딩

    1. sqldf(‘SQL명령문’)

      1. ex) sqldf(‘select distinct Species from iris’)

      2. iris내에 Sepal.Length의 평균을 구해보자

        1. sqldf(“select avg(Sepal_Length) from iris where Species=’setosa’”)

        2. SQL은 컬럼명에’.’이 들어갈 수 없어서 Sepal_Length로 적어야하고, 대소문자 구분이 없다.

      3. iris내의 Species별 평균을 구해보자

        1. sqldf(‘select Species, avg(Sepal_Length) from iris group by Species’)

  3. plyr 패키지: 데이터를 분활(split),특정함수에 적용(apply), 그 결과를 조합(combine)하는 세단계를 처리하는 함수를 제공

    1. 입력값: 배열, 데이터프레임, 리스트

    2. 함수의 첫번째와 두번째자리의 의미: a: array, d: data.frame, l: list 중 (1) 입력값, (2) 출력값

    3. 함수

      1. adply(): 입력값이 꼭 a일 필요가 없다. 숫자 색인으로 각 행이나 열을 읽을 수 있으면 됨

        1. 왜쓰나? apply()를 사용하면 output은 ‘행렬’로 결과를 변환해서 문자가 섞여있으면 모두 문자로 변환됨

      2. ddply()

        1. Species로 그룹지을 때, .(변수) <- 이렇게 사용

          1. ex) ddply(iris, .(Species), function(sub){data.frame(Sepal.Length.mean)=mean(Sepal.Length))})

        2. 여러변수들로  그룹지을 때 -> .(변수, 변수)

          1. ex) ddply(iris, .(Species, Sepal.Length > 5.0), function(sub){data.frame(Sepal.Length.mean=mean(Sepal.Length))})

      3. m*ply()

        1. 데이터프레임 혹은 함수만 인자로 받아서 output을 바꾸는 함수

        2. 난수 생성해서 프레임에 추가하는 예제

          1. ex) mdply(x, rnorm, n=2)

  4. transform(), summaries(), subset(): plyr()패키지들과 함께 사용되는 함수들

    1. transform(): 데이터프레임 내의 데이터를 수정하여 새로운 항목으로 추가할 때

      1. ex) ddply(baseball, .(id), transform, cyear=min(year))

      2. 만일 두개 이상의 항목을 추가하고 싶다면 -> mutate()사용

        1. ex) ddply(baseball, .(id), mutate, cyear, cyear1)

    2. summarise(): 데이터를 조작하고 추가하고 싶은 컬럼을 새로운 데이터프레임에 넣어서 반환

      1. ex) ddply(baseball, .(id), summarise, cyear= min(year))

    3. subser(): 조건에 맞는 데이터를 추출

      1. ex) ddply(baseball, .(id), g == max(g))

  5. reshape2()

    1. melt(): 데이터 변형

    2. melt(인자, dataframe name)

      1. ex) melt(id=1:4, french_fries)

        1. id는 식별해주는 id, french_fries는 data.frame자료

      2. NA값이 포함된 것을 지우고 싶을 때

        1. rm.na =T

    3. complete.cases(data.frame): 하나라도 NA가 있으면 FALSE, 하나도 없으면 TRUE를 반환

  6. cast(): dcast/ acast -> d: data.frame/ a: vector, matrix, array

    1. dcast(데이터명, formula)

      1. ex) m <- melt(id=1:2, smiths)

      2. ex) x <- dcast(m, subject + time ~ … )

      3. identical(x, smiths) : 확인작업

    2. id를 모두 안 써도 됨

      1. ex) id = time만 써도 됨

  7. data.table(): data.frame와 비슷한 구조

    1. 패키지이기 때문에 다운과 library필수

    2. 모든 내용을 print하지 않아 편리

      1. 하지만 내용을 충분히 보고 싶을때는 x[1:n,]을 사용해서 지정

    3. 데이터 프레임과 호환이 잘 되어 프레임이사용하는 함수는 웬만하면 사용 가능, 하지만 안될 시 as.data.frame()으로 변환해서 사용

    4. data.table[행,표현식,옵션]으로 인덱싱

      1. 사용법 예시: as.data.table(iris), iris[1, Species]

        1. 주의할 점: 따옴표 사용 안함, data.frame은 사용함

      2. 옵션은 by를 사용

        1. ex) iris_table[,Sepal.Length,by=Species]

    5. setkey()

      1. 만일 어떤 조건을 줘서 그에 맞는 조건에 해당하는 행을 모두 출력할 때는 R은 모든 행을 훑고지나가면서 탐색한다. 이는 시간이 많이 걸리는 행위이기 때문에 미리 조건에 맞는 색인을 만들어 놓고 한다면 훨씬 수월 -> 이를 위해, key를 지정

      2. 사용법

        1. setkey(데이터명, key로 설정할 column)

        2. ex) setkey(dt1, x)

        3. dt1[dt2,]: dt1에서 x를 key로 설정했기 때문에 이에 대응되는 dt2의 컬럼을 dt1에 추가해서 보여줌

          1.  
        4. datatable1[x=13,list(x_mean=mean(x),x_std=s\d(x))]: datatable1의 x값이 13인 애들만 search하고 y의 평균 구해라

        5. merge()사용 가능 -> 속도 느림

    6. 참조를 이용한 데이터 수정

      1. 사용법: dt[i,변수명 := 값]

    7. rbindlist

      1. plyr패키지에 ldply()가 llply()보다 느리다.

      2. rbindlist()는 llply()로 계산결과를 리스트로 반환해서 이를 list를 묶어 데이터프레임으로 변환하는 것

  8. 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

+ Recent posts