【问题标题】:Merging datasets of which only some columns match合并只有部分列匹配的数据集
【发布时间】:2019-04-10 13:13:20
【问题描述】:

我想合并大约 27 个不同的数据集。对于这些数据集中的每一个,都有许多相同的列,但也有许多不相同的列。我希望将相同的列“堆叠”,同时简单地添加不同的列。

假设数据集 1 和 2 如下所示:

library(data.table)
df1 <- fread(
    "A   B   C  iso   year   
     0   1   1  NLD   2009   
     1   0   2  NLD   2009   
     0   0   3  AUS   2011   
     1   0   4  AUS   2011   
     0   1   7  NLD   2008   
     1   0   1  NLD   2008   
     0   0   3  AUS   2012",
  header = TRUE
)
df2 <- fread(
    "A   B   D  E  iso   year   
     0   1   1  NA ECU   2009   
     1   0   2  0  ECU   2009   
     0   0   3  0  BRA   2011   
     1   0   4  0  BRA   2011   
     0   1   7  NA ECU   2008   
     1   0   1  0  ECU   2008   
     0   0   3  2  BRA   2012   
     1   0   4  NA BRA   2012",
  header = TRUE
)

我现在想将这些 df 与:

rbind(df1, df2, fill=TRUE)

合并后的数据集应如下所示:

df_merged <- fread(
    "A   B   C  D   E   iso   year   
     0   1   1  NA  NA  NLD   2009   
     1   0   2  NA  NA  NLD   2009   
     0   0   3  NA  NA  AUS   2011   
     1   0   4  NA  NA  AUS   2011   
     0   1   7  NA  NA  NLD   2008   
     1   0   1  NA  NA  NLD   2008   
     0   0   3  NA  NA  AUS   2012   
     0   1   NA  1  NA  ECU   2009   
     1   0   NA  2  0   ECU   2009   
     0   0   NA  3  0   BRA   2011   
     1   0   NA  4  0   BRA   2011   
     0   1   NA  7  NA  ECU   2008   
     1   0   NA  1  0   ECU   2008   
     0   0   NA  3  2   BRA   2012   
     1   0   NA  4  NA  BRA   2012",",
   header = TRUE
)

但是由于某种原因,将其应用于实际数据时出现错误:

    Error in rbind(deparse.level, ...) : 
      numbers of columns of arguments do not match

我试图在我的示例中重新创建错误(通过使 df 的列数和行数不同)但未能这样做。

有什么想法吗?

编辑:显然问题在于我的两个数据集中的类在某些列名所在的情况下并不相同。我会在它开始工作后发布更新。

【问题讨论】:

    标签: r merge data.table


    【解决方案1】:

    你可以使用rbindlist,即

    library(data.table)
    rbindlist(list(df1, df2), fill = TRUE)
    

    【讨论】:

    • 虽然它不起作用,但这个选项确实告诉我出了什么问题。显然是班级问题,非常感谢!
    • 没问题。请不要忘记勾选您满意的答案旁边的勾号。
    【解决方案2】:

    你也可以使用dplyr包中的bind_rows函数-

    > bind_rows(df1,df2)
    
        A B  C iso year  D  E
     1: 0 1  1 NLD 2009 NA NA
     2: 1 0  2 NLD 2009 NA NA
     3: 0 0  3 AUS 2011 NA NA
     4: 1 0  4 AUS 2011 NA NA
     5: 0 1  7 NLD 2008 NA NA
     6: 1 0  1 NLD 2008 NA NA
     7: 0 0  3 AUS 2012 NA NA
     8: 0 1 NA ECU 2009  1 NA
     9: 1 0 NA ECU 2009  2  0
    10: 0 0 NA BRA 2011  3  0
    11: 1 0 NA BRA 2011  4  0
    12: 0 1 NA ECU 2008  7 NA
    13: 1 0 NA ECU 2008  1  0
    14: 0 0 NA BRA 2012  3  2
    15: 1 0 NA BRA 2012  4 NA
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-05-23
      • 1970-01-01
      • 1970-01-01
      • 2021-01-29
      • 1970-01-01
      相关资源
      最近更新 更多