【问题标题】:How to join tables, keep columns and display NA values?如何连接表、保留列和显示 NA 值?
【发布时间】:2020-05-09 15:16:58
【问题描述】:

我正在尝试对表进行完全连接,保留两个列并在不匹配时插入 NA 值:

d1 = tibble(
  Period1 = c('jan/2020', 'fev/2020', 'mar/2020', 'mar/2020', 'nov/2020')
)

d2 = tibble(
  Period2 = c('jan/2020', 'abr/2020', 'mar/2020', 'fev/2020', 'dez/2020')
)

full_join(d1,d2, by = c("Period1" = 'Period2'))

我得到这个输出:

但我想要这个输出:

# A tibble: 7 x 2
#  Period1  Period2 
#  <chr>    <chr>   
#1 jan/2020 jan/2020
#2 fev/2020 fev/2020
#3 mar/2020 mar/2020
#4 mar/2020 mar/2020
#5 nov/2020 <NA>    
#6 <NA>     abr/2020
#7 <NA>     dez/2020

【问题讨论】:

    标签: r dplyr data-science


    【解决方案1】:

    我们可以创建一个新列然后加入

    library(dplyr)
    d1 %>%
       mutate(Period2 = Period1) %>% 
      full_join(d2 %>%
             mutate(Period1 = Period2), by = c("Period1" = "Period2")) %>%
      select(Period1 = Period2, Period2 = Period1.y)
    # A tibble: 7 x 2
    #  Period1  Period2 
    #  <chr>    <chr>   
    #1 jan/2020 jan/2020
    #2 fev/2020 fev/2020
    #3 mar/2020 mar/2020
    #4 mar/2020 mar/2020
    #5 nov/2020 <NA>    
    #6 <NA>     abr/2020
    #7 <NA>     dez/2020
    

    【讨论】:

      【解决方案2】:

      data.table:

      library(data.table)
      dt <- merge(setDT(d1)[,Period := Period1],
                  setDT(d2)[,Period := Period2],
                  by.x = "Period1",
                  by.y = "Period2", all = TRUE,
                  suffixes = c("1",'2')
            )[,-1]
      
      dt
          Period1  Period2
      1:     <NA> abr/2020
      2:     <NA> dez/2020
      3: fev/2020 fev/2020
      4: jan/2020 jan/2020
      5: mar/2020 mar/2020
      6: mar/2020 mar/2020
      7: nov/2020     <NA>
      

      您将收到警告,因为您在 merge 中创建了一个列 Period1,它是一个键,但您可以忽略它([,-1] 用于删除此临时连接键)

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-07-24
        • 2021-05-20
        • 2021-12-09
        • 2018-11-07
        • 1970-01-01
        相关资源
        最近更新 更多