【问题标题】:Finding a Row with a Partial Match in another Data Frame and then writing its output into the original DF在另一个数据框中找到部分匹配的行,然后将其输出写入原始 DF
【发布时间】:2021-02-22 03:37:51
【问题描述】:

我有一个数据框“zadavatele”和数据框“Final_Town_Contacts”。在 df zadavatele 中,有一列带有名称的“buyer_name”,在 df “Final_Town_Contacts”中有一列“Name”和“id”。问题是名称的格式有点不同,所以我不能使用匹配功能。 “buyer_name”列包含名称和其他词,因此它包含“名称”列的全部内容和一些其他字符。另一个问题是并非所有包含在“zadavatele”df 中的城镇都包含在“Final_Town_Contacts”中。

我想找到匹配的城镇,然后从数据框“Final_Town_Contacts”中为“zadavatele”中的相应城镇写入变量“id”。

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

# 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`
}
}

但这没有用。您知道如何进行这项工作吗?

感谢您的帮助!

【问题讨论】:

    标签: r string dataframe for-loop


    【解决方案1】:

    这行得通吗,所以只有匹配的名称会被包括在内,因为内部连接。买家名称的第一个字符与名称列匹配。如果情况并非总是如此,请告诉我。

    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
    

    【讨论】:

      猜你喜欢
      • 2014-06-22
      • 1970-01-01
      • 2019-04-15
      • 1970-01-01
      • 1970-01-01
      • 2015-10-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多