如果来自一个数据帧的两个列的字符串包含在来自第二个数据帧的列的字符串中,那么我需要对两个数据帧进行匹配和连接。
示例dataframe:
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的df2列。因此,我想运行一个代码来查看df1$First 和 df2$Last是否在df2$Name字符串中,以及是否让它将df2$ID拉到df1中。
我的R导师告诉我使用来自fuzzyjoin包的fuzzyjoin:
fzjoin <- fuzzy_left_join(df1, df2, by = c("First" = "Name"), match_fun = "contains")但是它给了我一个错误,在这个论点是不合逻辑的;我不知道如何重写它来做我想做的事情;文档说match_fun应该是TRUE或FALSE,但我不知道该如何处理。而且,它只匹配df1$First,而不是df1$First和df1$Last。我想我可能能够使用格里普,但不确定如何基于我所见过的例子。有什么建议吗?
发布于 2021-06-07 14:12:43
文档指出,match_fun应该是一个“向量化函数,给出两列,返回TRUE或FALSE,以确定它们是否匹配”。它不是真或假,它是一个返回TRUE或FALSE的函数。如果我们切换您的订单,我们可以使用stringr::str_detect,它会根据需要返回TRUE或FALSE。
fuzzyjoin::fuzzy_left_join(
df2, df1,
by = c("Name" = "First", "Name" = "Last"),
match_fun = stringr::str_detect
)
# Name ID First Last
# 1 mr john smith ID1 john smith
# 2 ID2 <NA> <NA>
# 3 timothy t mcgee ID3 <NA> <NA>
# 4 dinnozo tom ID4 tom dinnozo
# 5 jane l doe ID5 jane doe
# 6 jimmy mcgee ID6 jimmy mcgee
# 7 leah elizabeth arthur palmer and co ID7 leah palmer
# 8 jerry bishop the cat ID8 jerry bishophttps://stackoverflow.com/questions/67873046
复制相似问题