Найдите два столбца, которые совпадают в двух кадрах данных, и поместите третий столбец из кадра данных 2 в новый столбец в кадре данных 1, используя R

#r #dataframe #merge

Вопрос:

У меня есть 2 кадра данных:

 df1: word1 previousWord a na b a c b  

другой фрейм данных выглядит следующим образом

 df2: this contains more pairs than exist in df1. It contains every combo possible  word1 previousWord Score a a 1 a b .5 a c .9 b a .5 b b 1 b c .2 c a .9 c b .2 c c 1  

Я хочу найти, когда пары из df1(т. Е. b-a, c-b) в df2, скопировать оценку из df2 и добавить ее в новый столбец в df1.

Например, результат будет выглядеть следующим образом:

 word1 previousWord Score a na na b a .5 c b .2  

Это то, что я пробовал, однако похоже, что он удалил много моих данных из df1. Изменение порядка не устранило эту проблему.

 df3lt;-merge(df2, df1, by = c("word1", "previousWord"))  

Мы очень ценим любую помощь.

Ответ №1:

Вы можете использовать left_join() dplyr его отсюда.

 library(dplyr) df3lt;- left_join(df1, df2, by = c("word1", "previousWord"))  

Выход

 word1 previousWord Score 1 a lt;NAgt; NA 2 b a 0.5 3 c b 0.2  

Данные

 df1 lt;- structure(list(word1 = c("a", "b", "c"), previousWord = c(NA,  "a", "b")), class = "data.frame", row.names = c(NA, -3L))  df2 lt;- structure(list(word1 = c("a", "a", "a", "b", "b", "b", "c", "c",  "c"), previousWord = c("a", "b", "c", "a", "b", "c", "a", "b",  "c"), Score = c(1, 0.5, 0.9, 0.5, 1, 0.2, 0.9, 0.2, 1)), class = "data.frame", row.names = c(NA,  -9L))