Как объединить таблицы, сохранить столбцы и отобразить значения NA? - PullRequest
1 голос
/ 09 мая 2020

Я пытаюсь выполнить полное соединение с таблицами, сохранить два столбца и вставить значения 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'))

Я получаю этот результат:

enter image description here

Но мне нужен этот результат:

# 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 ]

2 голосов
/ 09 мая 2020

С 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>

Вы получите предупреждение, так как вы создаете столбец Period1 внутри слияния , который является ключом, но вы можете его игнорировать ([,-1] используется для удаления этого временного ключа соединения)

2 голосов
/ 09 мая 2020

Мы могли бы создать новый столбец, а затем присоединиться к

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
...