You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

基于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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.28 06:30:08