私はデータフレームを持っています:
foo <- list(df1 = data.frame(x=c('a', 'b', 'c'),y = c(1,2,3)),
df2 = data.frame(x=c('d', 'e', 'f'),y = c(4,5,6)))
それをフォームの単一のデータフレームに変換できますか?
data.frame(x = c('a', 'b', 'c', 'd', 'e', 'f'), y= c(1,2,3,4,5,6))
?
do.call("rbind", foo)
がうまくいくはずです。
plyr
:
foo <- list(df1 = data.frame(x=c('a', 'b', 'c'),y = c(1,2,3)),
df2 = data.frame(x=c('d', 'e', 'f'),y = c(4,5,6)))
library(plyr)
ldply(foo)[,-1]
x y
1 a 1
2 b 2
3 c 3
4 d 4
5 e 5
6 f 6
コードにはいくつかの問題があります。
1つ目は、リスト内の代入ステートメントが機能しないことです。これは、たとえば次の方法で修正する必要があります。
foo <- list(
df1 = data.frame(x=c('a', 'b', 'c'), y = c(1,2,3)),
df2 = data.frame(x=c('d', 'e', 'f'), y = c(4,5,6))
)
次に、rbind()を使用してデータフレームを結合できます。
rbind(foo$df1, foo$df2)
x y
1 a 1
2 b 2
3 c 3
4 d 4
5 e 5
6 f 6
しかし、これはより多くの質問を提起します。たとえば、なぜ最初にリストのデータフレームを組み合わせるのですか。 2つ目は、ベクターではなくデータフレームを本当に使用する必要があるかどうかです。最後に、私は通常、rbind()を避け、この方法でデータフレームを組み合わせるときにmerge()を使用するようにしています。
merge(foo[[1]], foo[[2]], all = TRUE)
はどうですか