基于dplyr实现多列关联更新数据框pro_sales列值求助
解决方法:用dplyr更新匹配行的pro_sales值
我来帮你完善这个dplyr操作!核心就是处理左连接后生成的两个pro_sales列,用coalesce()函数就能轻松实现你的需求——用df2里匹配到的值覆盖df1的原数据,没匹配到的行就保留df1的初始值。
完整代码实现
library(dplyr) df1 <- data.frame(storecode = c(100,100,100,200,200), productcode = c(1,2,3,1,2), pro_sales = c(0,0,0,0,0)) df2 <- data.frame(storecode = c(100,100,200), productcode = c(1,2,1), pro_sales = c(0,1,0)) df_result <- df1 %>% left_join(df2, by = c("storecode", "productcode")) %>% mutate(pro_sales = coalesce(pro_sales.y, pro_sales.x)) %>% select(storecode, productcode, pro_sales) print(df_result)
代码细节解释
- 左连接后,df1的原始
pro_sales会被命名为pro_sales.x,df2的对应列会变成pro_sales.y; coalesce(pro_sales.y, pro_sales.x)的作用很直观:如果pro_sales.y不是NA(也就是能在df2中匹配到对应行),就用它的值替换;如果是NA(比如df1里storecode=100、productcode=3的行),就保留pro_sales.x的原始0值;- 最后用
select筛选出我们需要的三列,去掉多余的中间列。
运行结果
storecode productcode pro_sales 1 100 1 0 2 100 2 1 3 100 3 0 4 200 1 0 5 200 2 0
完全匹配你想要的目标输出!
内容的提问来源于stack exchange,提问作者melik
相关产品推荐
相关产品推荐

