R의 data.table 패키지 사용법을 알아보자

2019. 3. 8. 06:46

R은 오픈소스이다 보니 패키지도 많고 데이터 유형도 여러가지다. 데이터 유형별로 문법이 동일하면 좋겠지만, 오픈소스로 누군가 관리하는 사람이 없다보니 문법이 통일되어 있지 않다. 파이썬의 pandas와 같은 DB형태의 자료구조는 data.frame과 data.table이 있는데, data.table이 속도가 빨라 많이 사용한다고 한다.

오늘은 R의 data.table 패키지의 사용법에 대해서 알아보고자 한다.


datatable_사용법


data.table은 data.frame을 상속한 것으로 속도가 빠르다. 구문도 data.frame보다 편리하여 실제 분석을 할 때 많이 사용한다. 데이터를 가공할 때는 dplyr도 많이 사용하지만, 어떤 때 보면 data.table의 문법이 더 심플하고 편리한 듯 하다. 여러가지 문법을 배우는 것은 곤욕스럽지만, 다른 사람이 작성한 코드를 이해하기 위해서라도 어느 정도는 해당 문법을 알아두는 것이 좋다.

data.table에 대한 자세한 내용은 github에도 나와 있다. 여기서는 그 중에서도 유용한 구문들을 한 번 알아보도록 하겠다.
( 참조: https://github.com/Rdatatable/data.table/wiki )


data.table을 테스트하기 전에 csv파일을 data.table로 읽어오는 작업부터 해보자. 엑셀 파일을 읽어오기 위해서 readxl 패키지를 이용해서 아래와 같이 작업이 가능하다. data.frame으로 불러서, as.data.table을 이용해서 data.table형태로 바꾼다.

> library
> df <- read.csv("test.xls")
> df <- as.data.table(df)


혹은, 아래와 같이 data.table을 신규 생성할 수도 있다. 아래와 같이 실행하면 2 X 3의 테이블이 만들어지고 칼럼은 x, v, foo가 된다.

> X = data.table(x=c("c","b"), v=8:7, foo=c(4,2))



data.table의 기본 문법은 아래와 같다.

 df[ 행 , 작업, 그룹핑 ]


'[]'를 이용해서 특정 row에 접속할 수가 있다. 특정 행에 대해 어떤 작업을 하고 그룹핑은 뭘로 할 지를 지정할 수 있다. coulmn에 접근하는 방버은 아래와 같이 하면 된다.

df[ , V]

df$V


더 구체적으로 알아보자. 아래에서 c는 column name을 의미한다.

제  목

문  법

row 

 nth  row값 보기

df[2], df[2:3]

조건으로 row값 보기

df[c>2 & c1>2]

특정row 제외하기 

 df[!2:4], df[-2:4)

 column

 정렬

 df[order(c)], df[order(x), ]

칼럼 선택 

df[ , c], df[ , list(c)], df[, .(c)] 

칼럼지우기 

df[, c:=NULL] 

계산 

합계 구하기

df[ ,sum(c)] 

합계 구하고, data.table로 반환하기

df[ , .sum(c)], df[ , .(sc = sum(c) ] 

column 계산하기

df[ , .(c, c*2)] 

문자열 붙이기

df[2:5, cat(c, "\n")] 

Grouping 

그룹핑 합계

df[ , sum(c), by=c1]

그룹핑한 값으로 정렬

df[ , sum(c), keyby=c1] , df[ , sum(c), by=c1][order(c1)], 2개 column으로 그룹핑할 때는 list사용

첫번째 값 가져오기

df[x, on="c1", mult="first"] 

마지막 값 가져오기

df[x, on="c1", mult="last"] 

2번째 값 가져오기

df[, . SD[2]. by=c1] 

마지막 값 가져오기 

df[, tail(.SD.2), by=c1] 

2개 이상 칼럼으로 계산

df[, list(MySum=sum(v), MyMin=min(v), MyMax=max(v)), by=.(x, y%%2)]

그룹별 row수

df[, .N, by=c1]

join 

right join

df[df1, on="c"]

left join

df1[df, on="c"] 

inner join

df[df1, on="c", nomatch=0] 

not join 

df[!df1, on="c"] 

c1이랑 c2를 key로 join 

df[df1, on=c(c1=="c2")], df[df1, on="c1==c2"]

 join하고 column선택

df[df1, .(c1, c2, c1.c2, c3), on=.(c1, c2>=3)] 

key셋팅

setkeyv(df, c1), hashkey(df), key(df) 

그래프 그리기

pdf("new.pdf")
df[, plot(c1,c2), by=c3]
dev.off()


이 외에도 여러가지 구문들이 있어지만, 우선 위에 문법들만으로도 벅찬 듯 싶다. 



오늘은 R의 data.table패키지의 사용법에 대해서 알아보았다. 사실 dplyr보다 구문도 짧고 편리해 보인다. 하지만, 그만큼 덜 직관적이라는 것이 단점인 듯 하다. 앞으로는 data.table과도 좀 더 친해져야겠다.


다음 포스팅에서는 dplyr의 사용법에 대해서 알아보도록 하겠다.


댓글()