如果一个数据帧的两列中的字符串包含在第二个数据帧的一列的字符串中,我需要对两个数据帧进行匹配和连接。
示例数据框:
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 姓氏”或完全包含该名称的其他名称。我需要ID
专栏来自df2
。所以我想运行一段代码看看是否df1$First
and df2$Last
是字符串中的某个位置df2$Name
,如果是,则将其拉出并加入df2$ID
to df1
.
我的 R 大师告诉我使用fuzzy_left_join
来自fuzzyjoin
包裹:
fzjoin <- fuzzy_left_join(df1, df2, by = c("First" = "Name"), match_fun = "contains")
但它给了我一个错误,即论证不符合逻辑;我不知道如何重写它来实现我想要的;这文档 https://rdrr.io/cran/fuzzyjoin/man/fuzzy_join.html说match_fun
应该TRUE
or FALSE
,但我不知道该怎么办。另外,它只匹配df1$First
而不是df1$First
and df1$Last
。我想我也许可以使用grepl https://stackoverflow.com/questions/10128617/test-if-characters-are-in-a-string,但不确定如何根据我见过的例子。有什么建议吗?