R 通过连接多个列来更新列
我有两个表,需要从第二个表中的R 通过连接多个列来更新列,r,dplyr,R,Dplyr,我有两个表,需要从第二个表中的pro_sales值更新第一个表中的pro_sales列值 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), productco
pro_sales
值更新第一个表中的pro_sales列值
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))
我可以离开加入dplyr,但在那之后我需要帮助吗
df1 %>%
left_join(df2,c("storecode"="storecode","productcode"="productcode")) %>%
mutate( ???? ) %>%
select(names, match, value = value.x)
谢谢。df1%
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))
library(dplyr)
df1 %>%
left_join(df2, by = c("storecode","productcode")) %>%
mutate(pro_sales.y = coalesce(pro_sales.y, 0)) %>%
select(storecode, productcode, pro_sales = pro_sales.y)
# storecode productcode pro_sales
# 1 100 1 0
# 2 100 2 1
# 3 100 3 0
# 4 200 1 0
# 5 200 2 0
突变(pro_sales.y=合并(pro_sales.y,0))%>%
选择(storecode、productcode、pro_sales=pro_sales.y)
#storecode productcode pro_销售
# 1 100 1 0
# 2 100 2 1
# 3 100 3 0
# 4 200 1 0
# 5 200 2 0
我假设,如您所述,如果要更新给定第二个表的第一个表中的值,则NA值应为零,而不是第一个表中的值。另一个选项是使用带有
数据的更新联接。table
-包:
library(data.table)
setDT(df1)
setDT(df2)
df1[df2, on = .(storecode, productcode), pro_sales := i.pro_sales][]
其中:
您希望如何处理不在第二个pro_sales列中的列值?将它们设置为零或设置为第一个数据帧中的值。代码示例中使用的列名与数据集中的列(即大写字母)不匹配。非常感谢您的支持。在sqldf update语句中有这样做的方法吗?它主要是一个连接,然后是一个列更新,所以我很确定会有一些等价的东西。不幸的是,我没有太多地使用
sqldf
。也许可以更新您的问题,询问sqldf
备选方案?还是发布一个新问题?
library(data.table)
setDT(df1)
setDT(df2)
df1[df2, on = .(storecode, productcode), pro_sales := i.pro_sales][]
storecode productcode pro_sales
1: 100 1 0
2: 100 2 1
3: 100 3 0
4: 200 1 0
5: 200 2 0