我有一个长度不等的数据表列表。一些数据表有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.
有关如何修改它以使其正常工作的任何建议。
答案 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功能。