web-dev-qa-db-ja.com

類似のデータフレームのリストを単一のデータフレームに結合できますか?

私はデータフレームを持っています:

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))

31
David LeBauer

do.call("rbind", foo)がうまくいくはずです。

67
Hong Ooi

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
8
Sacha Epskamp

コードにはいくつかの問題があります。

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()を使用するようにしています。

3
Andrie

merge(foo[[1]], foo[[2]], all = TRUE)はどうですか

1
Chase