cbind(), rbind(), do.call(), rbindlist()

Published by onesixx on

예제데이터
R
vector 리스트 vs. dataFrame 리스트

rbind cbind

rbind / cbind는 vector/dataTable 형식을 받아서
row이나 column별로 combine한다.

R
rbind/cbind

rbind와 bind는 list형식을 받으면 결과는 나오지만, 원하는 값이 아니다.

R
리스트 형식을 사용하면 안됨

do.call()

R
R
cf.

참고

R
cf.

rbindlist()

rbindlist()는 인수로 list형식만 받을 수 있는데,
그 list의 element는 data.table / dataframe 형식 이어야한다.

R

rbindlist(ld)는 do.call(“rbind”, ld) 와 같다. 하지만, 빠르다.

R

rbindlist(l, use.names=”check”, fill=FALSE, idcol=NULL)
# rbind(\dots, use.names=TRUE, fill=FALSE, idcol=NULL)

bind 방법(concatenating a list of dataFrames)

1. do.call()  from Base 팩키지

R

2. ldply() from plyr 팩키지

R

3. rbind.fill() from plyr 팩키지

R

4. rbindlist() from data.table팩키지

R

성능비교

rbindlist()가 가장 빠르다.
하지만, (컬럼명이 아닌) 위치를 기준으로 merge하므로, 각 파일의 컬럼위치가 다를경우 사용불가
나머지는 컬럼명 기준으로 merge하므로, 컬럼명의 위치가 달라도 사용가능

R

elapsed를 보면, rbindlist()가 가장 빠름.  (relative를 보면 가장 빠른 것을 1로 놓고 비교)

                       test replications elapsed relative user.self sys.self user.child sys.child
1 do.call(rbind, mergeData)          100    0.03        3      0.03        0         NA        NA
2   ldply(mergeData, rbind)          100    0.11       11      0.11        0         NA        NA
3     rbind.fill(mergeData)          100    0.04        4      0.04        0         NA        NA
4      rbindlist(mergeData)          100    0.01        1      0.01        0         NA        NA
Categories: Reshaping

onesixx

Blog Owner

2 Comments

Leave a Reply

Your email address will not be published.