Data.table:rbind具有不相等列的数据表列表

时间:2018-03-16 13:30:01

标签: r

我有一个长度不等的数据表列表。一些数据表有​​35列,其他数据表有36列。

我有这行代码,但它会生成错误

> lst <- unlist(full_data.lst, recursive = FALSE)
> model_dat <- do.call("rbind", lst)
Error in rbindlist(l, use.names, fill, idcol) : 
  Item 1362 has 35 columns, inconsistent with item 1 which has 36 columns. If instead you need to fill missing columns, use set argument 'fill' to TRUE.

有关如何修改它以使其正常工作的任何建议。

3 个答案:

答案 0 :(得分:3)

这是您尝试做的最小例子。
无需使用任何其他包来执行此操作。只需在fill=TRUE中设置rbindlist即可。

你可以这样做:

df1 <- data.table(m1 = c(1,2,3))
df2 <- data.table(m1 = c(1,2,3), m2=c(3,4,5))

df3 <- rbindlist(list(df1, df2), fill=T)

print(df3)

   m1 m2
1:  1 NA
2:  2 NA
3:  3 NA
4:  1  3
5:  2  4
6:  3  5

答案 1 :(得分:2)

尝试使用包rbind.fill中的plyr

输入数据,3个具有不同列数的数据帧

df1<-data.frame(a=c(1,2,3,4,5),b=c(1,2,3,4,5))
df2<-data.frame(a=c(1,2,3,4,5,6),b=c(1,2,3,4,5,6),c=c(1,2,3,4,5,6))
df3<-data.frame(a=c(1,2,3),d=c(1,2,3))

full_data.lst<-list(df1,df2,df3)

解决方案

library("plyr")
rbind.fill(full_data.lst)
   a  b  c  d
1  1  1 NA NA
2  2  2 NA NA
3  3  3 NA NA
4  4  4 NA NA
5  5  5 NA NA
6  1  1  1 NA
7  2  2  2 NA
8  3  3  3 NA
9  4  4  4 NA
10 5  5  5 NA
11 6  6  6 NA
12 1 NA NA  1
13 2 NA NA  2
14 3 NA NA  3

答案 2 :(得分:1)

如果我理解你的问题,我可能只会看到两个附加数据表的选项。

选项A:从其中一个数据集中删除额外变量

table$column_Name <- NULL

选项B)在未完成的数据集中创建缺少值的变量。

full_data.lst$column_Name <- NA

然后做rbind功能。