【问题标题】:Data.table: rbind a list of data tables with unequal columns [duplicate]Data.table:rbind 列不相等的数据表列表[重复]
【发布时间】:2018-03-16 13:30:01
【问题描述】:

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

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

【问题讨论】:

  • 错误提示您尝试绑定的对象的列数不相等。
  • 如问题中所述,“有些数据表有​​ 35 列,而另一些有 36 列。”

标签: r


【解决方案1】:

这是您正在尝试做的一个最小示例。
无需使用任何其他包来执行此操作。只需在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

【讨论】:

    【解决方案2】:

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

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

    table$column_Name <- NULL
    

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

    full_data.lst$column_Name <- NA
    

    然后做rbind函数。

    【讨论】:

      【解决方案3】:

      尝试使用包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
      

      【讨论】:

        猜你喜欢
        • 2023-03-30
        • 1970-01-01
        • 2021-02-04
        • 2016-09-25
        • 1970-01-01
        • 1970-01-01
        • 2020-12-04
        • 1970-01-01
        • 2021-03-27
        相关资源
        最近更新 更多