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

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

do.call은 Input으로 받은 list에 대해 전체적으로 한번만 mean 함수를 적용, output은 vector
lapply는 Input으로 받은 vector를 각각 list화하여, 각각 list갯수만큼 mean함수 적용, output은 list

rbindlist()

rbindlist()는 input인수로 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)

rbindlist 의 idcol

https://itsalocke.com/blog/r-quick-tip-collapse-a-lists-of-data.frames-with-data.table/
R

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

성능비교

https://www.r-bloggers.com/concatenating-a-list-of-data-frames/ – 번역

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

1번 기본 함수인  rbind.data.frame() 은 row를 추가할때마다 Column명을 일일이 확인하고 rearange하다보니, 가장 느리다.
반면, 4번 C로 작성된 rbindlist는 같은 위치에 같은 컬럼이 있다고 가정하고 바로 합치다보니, 가장 빠르다. 

Categories: Reshaping

onesixx

Blog Owner

guest
2 Comments
Oldest
Newest Most Voted
Inline Feedbacks
View all comments
2
0
Would love your thoughts, please comment.x
()
x