binding

Published by onesixx on

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

https://onesixx.com/lapply/
https://onesixx.com/lapply-vs-docall/
https://onesixx.com/bind/
예제데이터
R
vector 리스트 vs. dataFrame 리스트

1. rbind() cbind()

  • Input: vector 또는 data.frame
  • Output: vector/matrix 또는 data.frame
R
rbind/cbind

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

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

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
R
do.call(“rbind”, ll)
  • do.call의 args로 list만을 받는다(rbindlist도 list만을 받지만, 그 내용이 data.frame이어야한다.)
  • do.call내의 함수는 list 인덱스 전체에 적용합니다.
  • 결과는 vector/ matrix 형태
R
do.call(“rbind”, ll)
R
do.call(“rbind”, ld)

참고> do.call() vs. lapply()

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

R
cf.

plyr::ldply() 팩키지

R

3. rbindlist()

  • Input: list (그 list의 element는 dataframe 형식 이어야한다.)
  • Output: data.frame

rbindlist()는 input인수로 list형식만 받을 수 있는데,

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/

각 list의 이름으로 각 행의 이름을 만든다.

R

bind 성능비교(concatenating a list of dataFrames)

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

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

R

 rbind.data.frame() 은 row를 추가할때마다 Column명을 일일이 확인하고 rearange하다보니, 가장 느리다.
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