#r #join #vlookup
#r #Присоединиться #vlookup
Вопрос:
Здесь есть много связанных вопросов об этой проблеме, в частности , об использовании left_join
from dplyr
, но я все еще не могу понять этого.
Все, что я хочу сделать, это вернуться LanguageClean
на Lookup
основе совпадения со Language
столбцом в df
. Если совпадения нет, просто вернитесь NA
. Я хочу LanguageClean
добавить в качестве новой колонки df
.
Я вижу , что мой приведенный ниже код повторяет ID
, но я этого не хочу. ID
Столбец не имеет значения для моих целей здесь, хотя мне нужно сохранить его в конечном кадре данных.
df lt;- structure(list(ID = structure(c(18L, 89L, 42L, 161L, 88L, 71L, 175L, 181L, 133L, 56L, 18L, 89L, 42L, 161L, 88L, 71L, 175L, 181L, 133L, 56L, 18L, 89L, 42L, 161L, 88L, 71L, 175L, 181L, 133L, 56L ), .Dim = c(10L, 3L)), Language = c("en", "", "lv", "en", "en", "de", "en", "ms", "", "en"), Geo = c("us", "", "-", "us", "us", "gb", "ca", "us", "-", "us")), class = "data.frame", row.names = c(NA, -10L)) lookup lt;- structure(list(Language = c("af", "ar", "ar", "ar", "ar", "ar", "ar", "ar", "ar", "eu", "be", "zh", "zh", "hr", "da", "nl", "en", "en", "en", "en", "en", "en", "fo", "fi", "fr", "fr", "gd", "de", "de", "de", "he", "hu", "id", "it", "ko", "lv", "mk", "mt", "no", "pt", "rm", "ro", "ru", "sr", "sk", "sb", "es", "es", "es", "es", "es", "es", "es", "es", "es", "sx", "sv", "ts", "tr", "ur", "vi", "ji", "sq", "ar", "ar", "ar", "ar", "ar", "ar", "ar", "ar", "bg", "ca", "zh", "zh", "cs", "nl", "en", "en", "en", "en", "en", "en", "et", "fa", "fr", "fr", "fr", "ga", "de", "de", "el", "hi", "is", "it", "ja", "ko", "lt", "ms", "no", "pl", "pt", "ro", "ru", "sz", "sr", "sl", "es", "es", "es", "es", "es", "es", "es", "es", "es", "es", "sv", "th", "tn", "uk", "ve", "xh", "zu"), LanguageClean = c("Afrikaans", "Arabic", "Arabic", "Arabic", "Arabic", "Arabic", "Arabic", "Arabic", "Arabic", "Basque", "Belarusian", "Chinese", "Chinese", "Croatian", "Danish", "Dutch", "English", "English", "English", "English", "English", "English", "Faeroese", "Finnish", "French", "French", "Gaelic", "German", "German", "German", "Hebrew", "Hungarian", "Indonesian", "Italian", "Korean", "Latvian", "Macedonian", "Maltese", "Norwegian", "Portuguese", "Rhaeto-Romanic", "Romanian", "Russian", "Serbian", "Slovak", "Sorbian", "Spanish", "Spanish", "Spanish", "Spanish", "Spanish", "Spanish", "Spanish", "Spanish", "Spanish", "Sutu", "Swedish", "Tsonga", "Turkish", "Urdu", "Vietnamese", "Yiddish", "Albanian", "Arabic", "Arabic", "Arabic", "Arabic", "Arabic", "Arabic", "Arabic", "Arabic", "Bulgarian", "Catalan", "Chinese", "Chinese", "Czech", "Dutch", "English", "English", "English", "English", "English", "English", "Estonian", "Farsi", "French", "French", "French", "Irish", "German", "German", "Greek", "Hindi", "Icelandic", "Italian", "Japanese", "Korean", "Lithuanian", "Malaysian", "Norwegian", "Polish", "Portuguese", "Romanian", "Russian", "Sami", "Serbian", "Slovenian", "Spanish", "Spanish", "Spanish", "Spanish", "Spanish", "Spanish", "Spanish", "Spanish", "Spanish", "Spanish", "Swedish", "Thai", "Tswana", "Ukrainian", "Venda", "Xhosa", "Zulu")), class = "data.frame", row.names = c(NA, -124L)) df lt;- left_join(df, lookup, by="Language")
Ответ №1:
Проблема в том, что таблица поиска содержит несколько записей для некоторых языков. Следовательно, вы в конечном итоге получаете несколько совпадений. Поэтому решите свою проблему, чтобы вы могли отфильтровать различные или уникальные комбинации из своего поиска с помощью dplyr::distinct
:
library(dplyr) df lt;- left_join(df, distinct(lookup, Language, LanguageClean), by = "Language") df #gt; ID.1 ID.2 ID.3 Language Geo LanguageClean #gt; 1 18 18 18 en us English #gt; 2 89 89 89 lt;NAgt; #gt; 3 42 42 42 lv - Latvian #gt; 4 161 161 161 en us English #gt; 5 88 88 88 en us English #gt; 6 71 71 71 de gb German #gt; 7 175 175 175 en ca English #gt; 8 181 181 181 ms us Malaysian #gt; 9 133 133 133 - lt;NAgt; #gt; 10 56 56 56 en us English