我正在尝试使用以下代码使用两个公共列合并两个数据帧。
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
由于
答案 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"))
我几天前做过!它对我有用!