2017-06-26 14 views
0

dplyr :: bind_rows()はデータフレーム上でしか動作しません。なぜ以下の両方が同じですか?R:dplyr :: bind_rows()はリスト上で動作していますか?

# Load pkgs, set seed 
library(dplyr) 
set.seed(1) 

# Create toy data 
foo <- list(df1 = data.frame(A = rnorm(3), B = rnorm(3)), 
      df2 = data.frame(C = rnorm(3), B = rnorm(3)), 
      df3 = data.frame(C = rnorm(3), A = rnorm(3))) 

df1 <- bind_rows(foo) 


# Combine all sources into 1 source 
for (i in 1:(length(foo) - 1)){ 
    foo[[i+1]] <- dplyr::bind_rows(foo[[i]], foo[[i+1]]) 
} 

# Extract final df from list 
df2 <- foo[[length(foo)]] 

# Check for identical 
identical(df1, df2) 
+3

を使用しなければならなかった理由である、rbindにデータフレームのリストを渡すことはできませんか?基本的に、現在のデータフレームをすべての繰り返しで次のデータフレームにバインドしています。すべてのデータフレームを一度にバインドするのと同じことです。 – Abdou

+0

?bind_rowsは、これがデータフレーム用であることを示唆しているようです。だから、私はリスト全体でそれを使用できるとは思っていませんでした。さらに、それがリスト全体に適用された場合、リストのすべての要素を反復することがわかっている理由はわかりませんでした。 – user3614648

+0

'bind_rows'は、データが1つのデータフレームに結合されますフレームは個別のオブジェクトまたはリストの一部です。比較する: 'bind_rows(mtcars [1:5、]、iris [1:6、]、mtcars [6:8、])'と 'bind_rows(list(mtcars [1:5、]、iris [1:6、 ]、mtcars [6:8、])) '。 – eipi10

答えて

0

https://rdrr.io/cran/dplyr/man/bind.html

によれば、「各引数には、いずれかのデータフレーム、データフレーム、またはデータフレームのリストとすることができるリストであることができます。」

bind_rows(foo) 

は、「データフレームのリスト」を渡します。

bind_rows(foo[[i]], foo[[i+1]]) 

は、データフレームを通過する間。

ところで、あなたはあなたが彼らが異なることが期待されるのはなぜ

do.call(rbind, foo) 
関連する問題