合并数据帧但保留公共列

时间:2014-07-21 12:35:54

标签: r merge

我正在尝试使用以下代码使用两个公共列合并两个数据帧。

data = merge(df1, df2,by.x=c("b_id"), by.y=c("e_id"), all=T)

这很好用。但是有一些行(数据的情况)具有第二数据帧的ID和数据,而不是第一个(反之亦然)。这意味着我返回第一个数据帧的NA行(反之亦然)。

我想知道如何返回合并数据集,其中第二个数据帧ID号被附加到合并数据帧中的第一个数据帧ID号。在SPSS或STATA等程序中,如果合并两个具有不同数据完整性的数据集,它会自动执行此操作。

e.g。我想要归还。

    b_id  dfv1  dfv2
    1101    5   NA
    1102    5   5
    1103    8   9
    1104    NA  3
    1105    NA  12

不是这个!

    b_id  dfv1 dfv2
    1101    5   NA
    1102    5   5
    1103    8   9
    NA      NA  3
    NA      NA  12

从这两个数据框中:

    b_id  dfv1              
    1101    5               
    1102    5               
    1103    8               
    NA      NA              
    NA      NA              

    e_id    dfv2              
    NA      NA              
    1102    5               
    1103    9               
    1104    3               
    1105    12   

由于

2 个答案:

答案 0 :(得分:1)

由于未提供输入数据,因此很难确定所要求的内容。基于我从问题中理解的内容,输入可以看起来像这样:

df1 <- data.frame(b_id = c(1101, 1102, 1103), dfv1 = c(5,5,8))
df2 <- data.frame(e_id = c(1102, 1103,1104,1105), dfv2 = c(5,9,3,12))

> df1
  b_id dfv1
1 1101    5
2 1102    5
3 1103    8

> df2
  e_id dfv2
1 1102    5
2 1103    9
3 1104    3
4 1105   12

现在,如果你运行

merge(df1, df2, by.x = "b_id", by.y = "e_id", all = TRUE)

  b_id dfv1 dfv2
1 1101    5   NA
2 1102    5    5
3 1103    8    9
4 1104   NA    3
5 1105   NA   12

这是否回答了这个问题?如果没有,请编辑您的问题以包含输入数据。

更新

提供输入数据后,现在可以回答您的问题。这似乎通过您提供的输入数据产生了您正在寻找的内容:

merge(df1[complete.cases(df1),], df2[complete.cases(df2),], by.x = "b_id", by.y = "e_id", all = T)

  b_id dfv1 dfv2
1 1101    5   NA
2 1102    5    5
3 1103    8    9
4 1104   NA    3
5 1105   NA   12

所以基本上你排除了每个data.frame中不完整的所有行,并将两者合并(这会在你想要的输出中创建一些新的NA)。

答案 1 :(得分:0)

尝试使用data = merge(df1, df2, all.x = TRUE, by=c("b_id","e_id")) 我几天前做过!它对我有用!