You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用dplyr函数直接合并两表,保留指定行与第二表唯一列?

如何在dplyr中更直接地合并数据框并保留指定name的行

你需要合并两个数据框,要求保留df1中所有的name(Fred和Sasha),同时纳入df2中对应name的相关行,排除Rebecca的数据。

原始数据

df1 <- data.frame(name = c('Fred', 'Fred', 'Fred', 'Sasha', 'Sasha', 'Sasha'),
                  year = c('2018-19', '2019-20', '2020-21', '2018-19', '2019-20', '2020-21'),
                  outcome1 = 1:6)
df2 <- data.frame(name = c('Sasha', 'Sasha', 'Sasha', 'Rebecca', 'Rebecca', 'Rebecca'),
                  year = c('2019-20', '2020-21', '2021-22', '2019-20', '2020-21', '2021-22'),
                  outcome2 = 2:7)

更直接的实现方法

你当前的方案是先全连接再过滤,其实可以提前处理df2,一步完成需求:

方法1:提前过滤df2后做全连接

直接在合并前筛选df2中属于df1的name,再执行全连接:

library(dplyr)

df3 <- full_join(df1, filter(df2, name %in% df1$name), by = c("name", "year"))

方法2:用semi_join提取匹配子集后合并

semi_join可以精准获取df2中与df1的name匹配的行,再和df1做全连接,逻辑更清晰:

df2_matched <- semi_join(df2, df1, by = "name")
df3 <- full_join(df1, df2_matched, by = c("name", "year"))

两种方法得到的结果和你期望的df3完全一致,无需额外执行过滤步骤。

内容的提问来源于stack exchange,提问作者Are-Pro-Gram-In

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.29 20:22:54