我有两个表,我需要在第一个表中更新第二个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))
我需要在列storecode
和productcode
上保持联接。下面应该是我的决赛桌:
storecode productcode pro_sales
1 100 1 0
2 100 2 1
3 100 3 0
4 200 1 0
5 200 2 0
我能够加入dplyr但是之后我需要帮助吗?
df1 %>%
left_join(df2,c("storecode"="storecode","productcode"="productcode")) %>%
mutate( ???? ) %>%
select(names, match, value = value.x)
谢谢。
答案 0 :(得分:2)
另一个选择是使用data.table
- 包的更新联接:
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
答案 1 :(得分:1)
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
我假设如果你想更新给定第二个表的第一个表中的值,如你所提到的那样,那么NA值应该是零而不是你在第一个表中的值。