2017-01-11 12 views
2

thisのようなさまざまなrbindingリストの質問を見てきましたが、これを行うより効率的な方法は実際には見つかりません。私は、共通のvalue列でリスト1、リスト2、リスト3から各オブジェクトをrbindする簡単な方法を見つけたいネストされたリストのrbindデータフレーム

df1 <- data.frame(ID = paste0(LETTERS[1:4],1:4), valueA = seq(0.1,0.4,0.1), Category= "Apples") 
df2 <- data.frame(ID = paste0(LETTERS[1:4],1:4), valueB = seq(0.1,0.4,0.1), Category= "Apples") 
list1 <- list(df1,df2) 

df3 <- data.frame(ID = paste0(LETTERS[1:4],1:4), valueA = seq(0.1,0.4,0.1), Category= "Pears") 
df4 <- data.frame(ID = paste0(LETTERS[1:4],1:4), valueB = seq(0.1,0.4,0.1), Category= "Pears") 
list2 <- list(df3,df4) 

df5 <- data.frame(ID = paste0(LETTERS[1:4],1:4), valueA = seq(0.1,0.4,0.1), Category= "Stairs") 
df6 <- data.frame(ID = paste0(LETTERS[1:4],1:4), valueB = seq(0.1,0.4,0.1), Category= "Stairs") 
list3 <- list(df5,df6) 

nestedlist <- list(list1,list2,list3) 

私はそれぞれが2つのデータフレームが含まれている3つのリストが含まれているネストされたリスト nestlistを持っています私はで終わるように:あなたは do.call(Map, ...)を使用することができます

rbind(nestedlist[[1]][[1]],nestedlist[[2]][[1]], nestedlist[[3]][[1]]) 

    ID A Category 
1 A1 0.1 Apples 
2 B2 0.2 Apples 
3 C3 0.3 Apples 
4 D4 0.4 Apples 
5 A1 0.1 Pears 
6 B2 0.2 Pears 
7 C3 0.3 Pears 
8 D4 0.4 Pears 
9 A1 0.1 Stairs 
10 B2 0.2 Stairs 
11 C3 0.3 Stairs 
12 D4 0.4 Stairs 

答えて

3

引数は、並列の方法でこれらのリスト通じた意志ループの地図とを呼び出すこととして、これはネストされたリストを渡します一緒に同じ位置でリストを結合するMap関数として:

do.call(Map, c(f = rbind, nestedlist)) 

# [[1]] 
# ID valueA Category 
# 1 A1 0.1 Apples 
# 2 B2 0.2 Apples 
# 3 C3 0.3 Apples 
# 4 D4 0.4 Apples 
# 5 A1 0.1 Pears 
# 6 B2 0.2 Pears 
# 7 C3 0.3 Pears 
# 8 D4 0.4 Pears 
# 9 A1 0.1 Stairs 
# 10 B2 0.2 Stairs 
# 11 C3 0.3 Stairs 
# 12 D4 0.4 Stairs 
# 
# [[2]] 
# ID valueB Category 
# 1 A1 0.1 Apples 
# 2 B2 0.2 Apples 
# 3 C3 0.3 Apples 
# 4 D4 0.4 Apples 
# 5 A1 0.1 Pears 
# 6 B2 0.2 Pears 
# 7 C3 0.3 Pears 
# 8 D4 0.4 Pears 
# 9 A1 0.1 Stairs 
# 10 B2 0.2 Stairs 
# 11 C3 0.3 Stairs 
# 12 D4 0.4 Stairs 
+0

私は本当にこのソリューションなどからbind_rowsを使用することができます - シンプルかつ効率的です - ありがとう!私はそれが@akrunの解決策より速いのだろうかと思います – Bonono

1

我々は

library(purrr) 
lapply(transpose(nestedlist), function(x) do.call(rbind, x)) 

を試すかdplyr

library(dplyr) 
transpose(nestedlist) %>% 
       map(bind_rows) 
#[[1]] 
# ID valueA Category 
#1 A1 0.1 Apples 
#2 B2 0.2 Apples 
#3 C3 0.3 Apples 
#4 D4 0.4 Apples 
#5 A1 0.1 Pears 
#6 B2 0.2 Pears 
#7 C3 0.3 Pears 
#8 D4 0.4 Pears 
#9 A1 0.1 Stairs 
#10 B2 0.2 Stairs 
#11 C3 0.3 Stairs 
#12 D4 0.4 Stairs 

#[[2]] 
# ID valueB Category 
#1 A1 0.1 Apples 
#2 B2 0.2 Apples 
#3 C3 0.3 Apples 
#4 D4 0.4 Apples 
#5 A1 0.1 Pears 
#6 B2 0.2 Pears 
#7 C3 0.3 Pears 
#8 D4 0.4 Pears 
#9 A1 0.1 Stairs 
#10 B2 0.2 Stairs 
#11 C3 0.3 Stairs 
#12 D4 0.4 Stairs 
関連する問題