【问题标题】:joining two dataframes on matching values of two common columns R在两个公共列 R 的匹配值上连接两个数据帧
【发布时间】:2021-11-27 18:11:14
【问题描述】:

我有两个数据框 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 中的“填充”列合并到 A。如果值不匹配,我想要一个标签“0”在填充列中,而不是 1。有没有办法可以做到这一点?我不确定也使用哪个连接,或者“合并”是否会更好?本质上,我并不是要删除任何两个公共列没有匹配值的行。感谢您的帮助!

【问题讨论】:

    标签: r dataframe join merge


    【解决方案1】:

    我们可以做一个left_join

    library(dplyr)
    library(tidyr)
    A %>%
        mutate(week = as.character(week)) %>% 
        left_join(B) %>% 
        mutate(fill = replace_na(fill, 0))
    

    【讨论】:

    • 这将仅基于星期列加入吗?我正在尝试根据两个表中匹配的 (week, store) 对加入。谢谢
    • 它基于两个星期,存储因为这些是常见的列。你可以用by = c("week", "store") 指定是否有更多常见的列并且只想使用这些
    猜你喜欢
    • 1970-01-01
    • 2015-02-14
    • 1970-01-01
    • 1970-01-01
    • 2021-11-19
    • 2018-10-03
    • 1970-01-01
    • 2020-07-12
    • 2021-12-09
    相关资源
    最近更新 更多