在 R 中比较和连接数据框

Posted

技术标签:

【中文标题】在 R 中比较和连接数据框【英文标题】:Compare and join dataframes in R 【发布时间】:2021-12-30 02:18:24 【问题描述】:

我有两个具有大部分相同变量的数据框,我想比较这两个数据框的情况。我想使用 df1 和 df2 中相同的所有案例创建一个新的数据框。

如果存在于两个数据帧中的变量的所有值都相同,则假定案例相同。变量“Age”有一个例外,如果值的最大差异为 1 年,则假定案例相同,而变量“Time”则可以接受 1 小时的差异。

ID1 <- c(100, 101, 102, 103)
V1 <- c(1, 1, 2, 1)
V2 <- c(1, 2, 3, 4)
Age <- c(25, 16, 74, 46)
Time <- c("9:30", "13:25", "17:20", "7:45")
X <- c (1, 3, 4, 1)

df1 <- data.frame(ID1, V1, V2, Age, Time, X)


ID2 <- c(250, 251, 252, 253)
V1 <- c(1, 2, 1, 2)
V2 <- c(1, 2, 2, 4)
Age <- c(26, 55, 16, 80)
Time <- c("9:30", "12:00", "12:55", "18:00")
Y <- c (3, 2, 1, 1)

df2 <- data.frame(ID2, V1, V2, Age, Time, Y)

在本例中,ID1=100 和 ID2=250 相同,ID1=101 和 ID2=252。

我想要一个新的数据框输出 like this one

请注意,“年龄”和“时间”的值是否取自 df1 或 df2 并不重要。重要的变量是 X 和 Y。

我希望有人可以帮助我解决这个问题。提前非常感谢:)

亲切的问候 菲利普

【问题讨论】:

正如下面的答案所暗示的,base R 与merge 的精确合并非常好。 (也有类似的 tidyverse 函数。)但允许不精确匹配更复杂。看到这个:***.com/questions/2231993/… 感谢 Sasha 的留言和链接。不幸的是,我在这里没有找到适用于我的问题的建议解决方案 【参考方案1】:

在基础 R 中:

df3 <- merge(df1, subset(df2, select = -c(Age, Time)), by = c("V1", "V2"))
df3[,c("ID1", "ID2", "V1", "V2", "Age", "Time", "X", "Y")]

【讨论】:

感谢您的回答,但您的建议是精确合并。我需要的是 V1 和 V2 的精确合并,但对于“年龄”,应该允许相差 1 年,对于“时间”,应该允许相差 1 小时。

以上是关于在 R 中比较和连接数据框的主要内容,如果未能解决你的问题,请参考以下文章

在系统 R 中连接两个或多个数据帧

在一个单元格中的多个可分离(连接)值上加入 R 数据框

将 R 中的数据帧连接/合并为向量类型单元格

具有巨大数据框的内部连接(约 200 万列)

tableau 和 R 的连接

连接熊猫数据框中的两列