我试图使用以下代码使用两个公共列合并两个数据帧。
data = merge(df1, df2,by.x=c("b_id"), by.y=c("e_id"), all=T)这个很好用。但是有一些行(数据用例)具有第二个数据帧的ID和数据,而不是第一个(反之亦然)。这意味着我为第一个数据帧返回NA行(反之亦然)。
我想知道如何返回一个合并数据集,其中第二个数据帧ID号被附加到合并数据帧中的第一个数据帧ID号。在SPSS或STATA等程序中,如果将两个数据集合并,数据的完整性不同,它就会自动完成这一操作。
我想把这个还给你。
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 谢谢
发布于 2014-07-21 14:05:00
由于没有提供输入数据,所以很难确定需要什么。根据我从问题中了解到的情况,输入如下:
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,就像您想要的输出一样)。
https://stackoverflow.com/questions/24865248
复制相似问题