数据表:重新绑定具有不相等列的数据表列表



我有一个长度不等的数据表列表。一些数据表有 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.

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

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

您可以这样做:

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

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

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

table$column_Name <- NULL

选项 B(在不完整的数据集中创建具有缺失值的变量。

full_data.lst$column_Name <- NA

然后做rbind功能。

尝试使用包plyr中的rbind.fill

输入数据,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

最新更新