r-在另一个数据帧中找到一个部分匹配的行,然后将其输出写入原始DF



我有一个数据帧"zadavatele";以及数据帧";Final_Town_Contacts";。在df zadavatele中,有一列";买方名称"以名称和df";Final_Town_Contacts";有一列";名称";以及";id";。问题是名称的格式有点不同,所以我不能使用match函数。列";买方名称"包含名称和其他单词,因此它包含列"的全部内容;名称";以及其他一些角色。另一个问题是,并非所有城镇都包括在";zadavatele";df包含在";Final_Town_Contacts";。

我想找到匹配的城镇,然后写变量";id";从数据帧";Final_Town_Contacts";对于";zadavatele";。

为了演示我想做什么,这里有两个数据帧:

# 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 

我希望在";zadavatele";数据帧:

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] && 
!is.na(str_detect(zadavatele$buyer_name[i], Final_Town_Contacts$Name[n]))))
zadavatele$id[n] = Final_Town_Contacts$`LAU 2`
}
}

但这并没有奏效。你知道怎么做吗?

谢谢你的帮助!

这样做有效,因此由于内部联接,只有匹配的名称才会被包括在内。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

相关内容

最新更新