如何依据ID列将df1的group列匹配添加至df2?
解决方案
方法一:基础R merge() 函数
利用merge()按ID列合并两个数据框,由于每个ID对应的group是唯一值,直接合并即可保留df2的所有行并匹配对应group:
df2final <- merge(df2, df1[, c("ID", "group")], by = "ID", all.x = TRUE)
执行后输出:
> df2final ID data3 group 1 person1 7 group1 2 person2 8 group2 3 person2 9 group2 4 person3 10 group1 5 person3 11 group1 6 person4 12 group2 7 person4 13 group2
方法二:tidyverse 包(dplyr)
若习惯用tidyverse语法,可先提取df1中唯一的ID-group对应关系,再通过left_join匹配到df2:
library(dplyr) # 提取唯一的ID-group映射关系 group_map <- df1 %>% distinct(ID, group) # 将group匹配到df2 df2final <- df2 %>% left_join(group_map, by = "ID")
输出结果与方法一完全一致。
补充说明
merge()的all.x = TRUE参数确保保留df2的所有行,即使df1中无对应ID(本题中ID完全重叠,该参数可省略,但保留能提升代码通用性)- 提前用
distinct()去重可减少合并时的计算量,在df1行数较多时更高效
内容的提问来源于stack exchange,提问作者Nereus
相关产品推荐
相关产品推荐

