R-datatable-아이콘
R-datatable

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

 

 

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

 

 

data.table에 대한 자세한 내용은 github에도 나와 있는데요. 여기서는 그 중에서도 유용한 구문들을 한 번 알아보겠습니다.

 

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 사용법을 알아보겠습니다.

  • 네이버 블러그 공유하기
  • 네이버 밴드에 공유하기
  • 페이스북 공유하기
  • 카카오스토리 공유하기