【发布时间】:2021-06-07 13:58:32
【问题描述】:
如果一个数据帧的两列的字符串包含在第二个数据帧的一列的字符串中,我需要对两个数据帧进行匹配和连接。
示例数据框:
First <- c("john", "jane", "jimmy", "jerry", "matt", "tom", "peter", "leah")
Last <- c("smith", "doe", "mcgee", "bishop", "gibbs", "dinnozo", "lane", "palmer")
Name <- c("mr john smith","", "timothy t mcgee", "dinnozo tom", "jane l doe", "jimmy mcgee", "leah elizabeth arthur palmer and co", "jerry bishop the cat")
ID <- c("ID1", "ID2", "ID3", "ID4", "ID5", "ID6", "ID7", "ID8")
df1 <- data.frame(First, Last)
df2 <- data.frame(Name, ID)
所以基本上,我有df1,其中的名字和姓氏相当有序;我有df2,它的名称可以组织为“名字,姓氏”或“姓氏名字”或“名字 MI 姓氏”或其他完全包含名称的东西。我需要来自df2 的ID 列。所以我想运行一个代码来查看df1$First 和 df2$Last 是否在df2$Name 的字符串中的某个位置,如果是,则将其拉入并加入df2$ID 到df1 .
我的 R 大师告诉我使用 fuzzyjoin 包中的 fuzzy_left_join:
fzjoin <- fuzzy_left_join(df1, df2, by = c("First" = "Name"), match_fun = "contains")
但它给了我一个错误,即论点不合逻辑;而且我不知道如何重写它来做我想做的事; documentation 说 match_fun 应该是 TRUE 或 FALSE,但我不知道该怎么做。此外,它只匹配df1$First 而不是df1$First 和df1$Last。我想我可能可以使用grepl,但根据我看到的示例不确定如何使用。有什么建议吗?
【问题讨论】: