R语言如何基于ID与CT日期两个条件合并两个数据框的指定列
R语言双主键匹配补充数据集实现方案
你可以使用dplyr的左连接+缺失值合并函数实现需求,核心逻辑是保留第一份数据集的所有行结构,按ID和date_ct两个匹配项关联第二份数据集的补充值,再合并重叠字段的取值:
tidyverse实现代码(适配你已加载的包环境)
df3 <- df1 %>% # 双主键左连接,保留df1的全部4行数据,匹配到的df2数据自动追加为新列 left_join(df2, by = c("ID", "date_ct"), suffix = c("", "_supp")) %>% # 合并重叠结果列:优先保留df1原有值,df1为NA时取df2的补充值 mutate( legs_mass = coalesce(legs_mass, legs_mass_supp), total_mass = coalesce(total_mass, total_mass_supp) ) %>% # 清理临时生成的带后缀的补充列 select(-ends_with("_supp"))
运行后输出的df3完全符合你给出的目标结构,df2独有的ctscan_label字段会自动保留在结果中,无需额外配置。如果不需要该字段,可在最后一步的select中补充-ctscan_label删除。
原方法失效原因说明
merge默认没有自动合并重叠列的逻辑,直接调用会生成带.x/.y后缀的两列重复字段,需要手动合并rbind/bind_rows是用于纵向堆叠结构相同的数据集的函数,不适用于这种按主键关联补充字段的场景
内容的提问来源于stack exchange,提问作者tcvdb1992
相关产品推荐
相关产品推荐

