Можно ли объединить фреймы данных с помощью чего-то вроде full_join в R без дублирования значений столбцов

#r #dplyr

Вопрос:

Я пытаюсь объединить потоки платежей по дате, однако, когда я использую full_join, он дублирует некоторые потоки платежей, что делает анализ невозможным.

Например, когда я запускаю этот код с примерами данных:

 library(tidyquant)  v1 = c("a", "a", "b", "b", "c", "c") v2 = c(1,2,3,4,3,4)  v3 = c("a", "b", "c") v4 = c(10,20,30)  df1 = data.frame(v1, v2) df2 = data.frame(v3, v4)  full_join(df1, df2, by = c("v1" = "v3"))  

Я получаю этот вывод:

 v1 v2 v4 1 a 1 10 2 a 2 10 3 b 3 20 4 b 4 20 5 c 3 30 6 c 4 30  

Но я хочу этого:

 v1 v2 v4 1 a 1 10 2 a 2 NA 3 b 3 20 4 b 4 NA 5 c 3 30 6 c 4 NA  

Есть ли какой-либо способ, используя соединение dplyrs или другие функции, чтобы получить желаемый результат.

Комментарии:

1. вы снова присоединяетесь к v1=v3.. таким образом, ожидается, что все а получат значение 10.

2. Я вас слышу, но есть ли какой-нибудь способ с помощью join или иным способом присоединиться без дублирования?

Ответ №1:

 library(data.table) #convert to data.table format setDT(df1); setDT(df2) #update join non-duplicated v1-values df1[!duplicated(v1), v4 := df2[df1[!duplicated(v1),], v4, on = .(v3 = v1)]]  # v1 v2 v4 # 1: a 1 10 # 2: a 2 NA # 3: b 3 20 # 4: b 4 NA # 5: c 3 30 # 6: c 4 NA