R中合并数据框:实现缺失部门均值显示为0
解决方法
你遇到的重复行问题是因为full_join会保留两个表中所有匹配和不匹配的行,当两个表存在相同Department时就会生成重复条目。要实现「实际数据覆盖初始0,无数据部门保留0」的需求,有两种简洁的dplyr方案:
方案1:使用rows_update(最直接)
rows_update专门用于用另一数据框的内容更新目标数据框的匹配行,未匹配的行保持原样,完全契合你的需求:
library(dplyr) # 定义初始数据框 initialDept_df <- data.frame( Department = c("Engineering", "Analysis", "Test"), Mean = 0 ) # 定义实际数据框 Department_df <- data.frame( Department = "Analysis", Mean = 22 ) # 执行更新 result_df <- initialDept_df %>% rows_update(Department_df, by = "Department")
运行后result_df即为你想要的结果:
Department Mean 1 Engineering 0 2 Analysis 22 3 Test 0
方案2:left_join + coalesce
先将实际数据左连接到初始数据框,再用coalesce优先取实际数据的Mean值,无实际数据时保留初始的0:
result_df <- initialDept_df %>% left_join(Department_df, by = "Department", suffix = c("_init", "_actual")) %>% mutate(Mean = coalesce(Mean_actual, Mean_init)) %>% select(Department, Mean)
该方法同样能得到目标结果,适合需要保留中间步骤数据的场景。
内容的提问来源于stack exchange,提问作者G Adams
相关产品推荐
相关产品推荐

