在 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 中比较和连接数据框的主要内容,如果未能解决你的问题,请参考以下文章