如何在R语言使用full_join时自动添加数据集标识变量
dplyr全连接自动生成来源标识的最优方案
方案1:使用dplyr 1.1.0及以上版本内置id参数(最简洁)
dplyr从1.1.0版本开始,所有连接函数(包括full_join())都新增了id参数,直接指定该参数即可自动生成来源标识列,无需手动修改原数据集:
library(dplyr) # 原始数据 df1 <- tribble(~ID, ~x, "A", 1, "B", 2, "C", 3) df2 <- tribble(~ID, ~y, "D", 4, "E", 5, "F", 6) # 直接指定id参数为新增标识列的列名 combined <- df1 %>% full_join(df2, by = "ID", id = "dataset")
生成的dataset列取值规则:
1:该行仅存在于第一个输入表(df1)2:该行仅存在于第二个输入表(df2)3:该行在两个表中均存在(匹配成功的行)
如果不需要区分「双表共有」的行,只要匹配你原有标识逻辑,可以加一步简单调整:
combined <- df1 %>% full_join(df2, by = "ID", id = "dataset") %>% mutate(dataset = ifelse(dataset %in% c(1,3), 1, 2))
方案2:旧版本dplyr兼容写法
如果你使用的dplyr版本低于1.1.0,没有内置id参数,可以用以下写法,无需提前修改原表:
combined <- df1 %>% mutate(dataset = 1) %>% full_join(df2 %>% mutate(dataset = 2), by = "ID") %>% # 补全标识,和你原有逻辑一致 mutate(dataset = coalesce(dataset, 2))
内容的提问来源于stack exchange,提问作者Enigma
相关产品推荐
相关产品推荐

