通过连接多个列来更新列

时间:2018-05-18 14:16:43

标签: 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),
                  productcode = c(1,2,1), pro_sales = c(0,1,0))

我需要在列storecodeproductcode上保持联接。下面应该是我的决赛桌:

  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)

谢谢。

2 个答案:

答案 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值应该是零而不是你在第一个表中的值。