通过匹配两个共同列的值,将两个数据框连接在一起 R

3
我有两个数据框A和B,它们都有多列。它们共享“week”和“store”这两个常见列。我想按照这些共同列的匹配值将这两个数据框连接起来。
例如,这是我拥有的数据的一个小子集:
A = data.frame(retailer = c(2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2),
store = c(5, 5, 5, 5, 5, 5, 5, 5, 6, 6, 6, 6, 6, 6, 6, 6), 
week = c(2021100301, 2021092601, 2021091901, 2021091201, 2021082901, 2021082201, 2021081501, 2021080801,
          2021080101, 2021072501, 2021071801, 2021071101, 2021070401, 2021062701, 2021062001, 2021061301),
dollars = c(121817.9, 367566.7, 507674.5, 421257.8, 453330.3, 607551.4, 462674.8,
  464329.1, 339342.3, 549271.5, 496720.1, 554858.7, 382675.5,
  373210.9, 422534.2, 381668.6))

并且

B = data.frame(
  week = c("2020080901", "2017111101", "2017061801", "2020090701", "2020090701", "2020090701",
           "2020091201","2020082301", "2019122201", "2017102901"),
  store = c(14071, 11468, 2428, 17777, 14821, 10935,  5127, 14772, 14772, 14772),
  fill = c(1, 1, 1, 1, 1, 1, 1, 1, 1, 1)
)

我想在匹配周数和门店值上将这两个表连接起来,以便将B表中的“fill”列合并到A表中。当值不匹配时,我希望在填充列中使用标签“0”,而不是“1”。有没有办法可以做到这一点?我不确定应该使用哪种连接方式,或者是否更适合使用“merge”?基本上,我不想删除任何没有这两个公共列匹配值的行。谢谢您的帮助!

1个回答

1
我们可以执行一个 left_join
library(dplyr)
library(tidyr)
A %>%
    mutate(week = as.character(week)) %>% 
    left_join(B) %>% 
    mutate(fill = replace_na(fill, 0))

这只会根据周列进行连接吗?我正在尝试基于两个表中匹配的(周、商店)对进行连接。谢谢。 - Jane Miller
它基于周和商店,因为这些是常见的列。如果有更多的共同列并且只想使用这些列,您可以使用 by = c("week", "store") 进行指定。 - akrun
@akrun,为什么将 week 转换为 as.character - Ed_Gravy
1
@Ed_Gravy 这是因为其中一个数据集中的周在字符类中,而另一个数据集中的周在数字类中,所以在连接时可能会出现类型不同的问题。 - akrun

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接