r-通过标准将不同维度的数据帧与不同的合并连接起来



晚上好,我正在尝试合并几个数据集,我在R中的常规工具今晚失败了。考虑下面的df1和df2。

df1 = data.frame(a = c("a", "b", "c"),
b = c("1", "2", "3"),
c = c("x", "y", "z"))
df2 = data.frame(a = c("1", "b", "c", "d", "e"),
b = c("a", "2", "3", "4", "5"),
d = c("x2", "y2", "z2", "x3", "y3"))

在这两种情况下,列a和b都应该充当分组变量。例如,在df1中,当a=a,b=1,则c=x。给定我正在处理的数据的结构,a和b的实际顺序无关紧要,因此如果a=1,b=a,则c将仍然等于x。问题在于,我想将df1与新的df df2合并。df2的结构类似,但包含一个新的变量d。可以看出,df2包括一些与a相比向后的a和b组合。此外,b还有一些额外的观察结果。

我正在寻找的所需数据帧如下:

desired = data.frame(a = c("a", "b", "c"),
b = c("1", "2", "3"),
c = c("x", "y", "z"),
d = c("x2", "y2", "z2"))

可以看出,a、b和c的原始柱状结构得到了保留,我们在D柱中添加了这些结构。然而,我们没有添加任何新的观察结果。

我已经尝试将merge()by.xby.y的不同组合一起使用。

我还尝试过使用各种left_joininner_join,但我一直在处理仍然无法处理a/b列中不匹配的数据集。

感谢您提供的任何想法或帮助。

干杯

您可以两次使用left_joindf2和df1,并使用coalesce-

library(dplyr)
df1 %>% 
left_join(df2, by = c("a"="a", "b"="b")) %>% 
left_join(df2, by = c("a"="b", "b"="a")) %>% 
mutate(
d = coalesce(d.x, d.y)
) %>% 
select(a,b,c,d)
a b c  d
1 a 1 x x2
2 b 2 y y2
3 c 3 z z2

早上好。看来,a和b的实际顺序确实很重要。sort你的df2,或者两者兼而有之。

df2[1:2] <- t(apply(df2[1:2], 1, sort, decreasing=TRUE))
merge(df1, df2)
#   a b c  d
# 1 a 1 x x2
# 2 b 2 y y2
# 3 c 3 z z2

最新更新