如何用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
相关产品推荐
相关产品推荐

