binding
rbind(), bind_row(), do.call(), rbindlist(),
https://onesixx.com/lapply/
https://onesixx.com/lapply-vs-docall/
예제데이터
1. rbind() cbind()
- Input: vector 또는 data.frame
- Output: vector/matrix 또는 data.frame
rbind와 cbind는 list형식을 받으면 결과는 나오지만, 원하는 값이 아니다.
bind_rows(), bind_cols()
dplyr 제공함수로써, 여러개의 data.frame을 row/column기준으로 merge할때 사용한다.
기본적으로 rbind, cbind와 결과는 같지만 빠르고, vector에는 적용이 안됨
bind_rows()는 column갯수가 다른 경우에도 NA처리를 통해 가능하고,
bind_cols()는 합치려는 data.frame의 컬럼명이 같은 경우, 번호를 붙여 구분해 준다.
plyr::rbind.fill()
2. do.call(f, X)
- Input: list
- Output: vector/matrix
- do.call의 args로 list만을 받는다(rbindlist도 list만을 받지만, 그 내용이 data.frame이어야한다.)
- do.call내의 함수는 list 인덱스 전체에 적용합니다.
- 결과는 vector/ matrix 형태
참고> do.call() vs. lapply()
do.call은 Input으로 받은 list에 대해 전체적으로 한번만 mean 함수를 적용, output은 vector
lapply는 Input으로 받은 vector를 각각 list화하여, 각각 list갯수만큼 mean함수 적용, output은 list
plyr::ldply() 팩키지
3. rbindlist()
- Input: list (그 list의 element는 dataframe 형식 이어야한다.)
- Output: data.frame
rbindlist()는 input인수로 list형식만 받을 수 있는데,
rbindlist(ld)는 do.call(“rbind”, ld) 와 같다. 하지만, 빠르다.
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/
각 list의 이름으로 각 행의 이름을 만든다.
bind 성능비교(concatenating a list of dataFrames)
https://www.r-bloggers.com/concatenating-a-list-of-data-frames/ – 번역
elapsed를 보면, rbindlist()가 가장 빠름. (relative를 보면 가장 빠른 것을 1로 놓고 비교)
rbind.data.frame() 은 row를 추가할때마다 Column명을 일일이 확인하고 rearange하다보니, 가장 느리다.
rbindlist는 같은 위치에 같은 컬럼이 있다고 가정하고 바로 합치다보니, 가장 빠르다.