Подтвердить что ты не робот

Могу ли я объединить список похожих данных в единый блок данных?

Дубликат:
преобразовать список фреймов данных в один фрейм данных.

У меня есть датафрейм:

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

?

4b9b3361

Ответ 1

do.call("rbind", foo) должен сделать трюк.

Ответ 2

с 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

Ответ 3

В вашем коде есть несколько проблем.

Во-первых, оператор присваивания в списке не работает. Это необходимо устранить, например:

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

Но это вызывает больше вопросов. Например, почему вы совмещаете кадры данных в списке в первую очередь. Во-вторых, нужно ли вам использовать кадры данных, а не векторы. Наконец, я обычно стараюсь избегать rbind() и, скорее, использовать merge() при объединении кадров данных таким образом.

Ответ 4

Как насчет merge(foo[[1]], foo[[2]], all = TRUE)