#r #string #dataframe #for-loop
#r #строка #фрейм данных #for-цикл
Вопрос:
У меня есть фрейм данных «задаватель» и фрейм данных «Final_Town_Contacts». В df задавателе есть столбец «buyer_name» с именем, а в df «Final_Town_Contacts» есть столбец «Имя» и «идентификатор». Проблема в том, что форматы имен немного отличаются, поэтому я не могу использовать функцию сопоставления. Столбец «buyer_name» содержит имя вместе с другими словами, следовательно, он содержит полное содержимое столбца «Имя» и некоторые другие символы. Другая проблема заключается в том, что не все города, включенные в «задавателе» df, включены в «Final_Town_Contacts».
Я хочу найти совпадающие города, а затем записать переменную «id» из фрейма данных «Final_Town_Contacts» для соответствующего города в «задавателе».
Чтобы продемонстрировать, что я хотел бы сделать, вот два фрейма данных:
# A tibble: 3 x 1
buyer_name
<chr>
1 xx abc
2 y fdg
3 z sad
Name id
<chr> <dbl>
1 y 54
2 z 11
3 x 32
Я хотел бы иметь этот вывод в «задавателе» фрейма данных:
buyer_name id
<chr> <dbl>
1 xx abc 32
2 y fdg 54
3 z sad 11
Я думал об использовании цикла for:
for (i in 1:nrow(zadavatele)) {
for (n in 1:nrow(Final_Town_Contacts)){
if(str_detect(zadavatele$buyer_name[i], Final_Town_Contacts$Name[n] amp;amp;
!is.na(str_detect(zadavatele$buyer_name[i], Final_Town_Contacts$Name[n]))))
zadavatele$id[n] = Final_Town_Contacts$`LAU 2`
}
}
Но это не сработало. У вас есть какие-либо идеи, как заставить это работать?
Спасибо за вашу помощь!
Ответ №1:
Работает ли это, поэтому будут включены только совпадающие имена из-за внутреннего соединения. Первый символ buyer_name сопоставляется со столбцом Name. Пожалуйста, дайте мне знать, если это не будет иметь место всегда.
library(dplyr)
df1 %>% mutate(Name = substr(buyer_name,1,1)) %>% inner_join(df2) %>% select(1,3)
Joining, by = "Name"
buyer_name id
1 xx abc 32
2 y fdg 54
3 z sad 11