如何基于grepl匹配条件连接两个R dataframe,解决fuzzy_join使用报错
报错原因
- 你给
match_fun传的是字符串格式的运算符/函数名,fuzzy_join要求传入实际的函数对象,不能加引号 grepl的默认参数顺序是grepl(匹配模式, 被搜索文本),直接传grepl的话参数顺序是反的:第二个匹配规则对应df1$fullnames(第一个入参)、df2$lastnames(第二个入参),我们要判断的是lastnames是否包含在fullnames里,需要调整参数顺序。
正确实现代码
先确保你已经安装加载了fuzzyjoin包:
# 安装包(首次使用执行) install.packages("fuzzyjoin") # 加载包 library(fuzzyjoin) # 正确的左连接代码 joined_dfs <- fuzzy_join( df1, df2, by = c("ages" = "ages", "fullnames" = "lastnames"), match_fun = list(`==`, function(x, y) grepl(y, x)), mode = "left" ) # 可选:整理输出字段,只保留需要的列 joined_dfs <- joined_dfs[, c("fullnames", "ages.x", "lastnames", "homestate")] colnames(joined_dfs)[2] <- "ages"
输出结果预览
运行后得到的结果完全符合需求:
fullnames ages lastnames homestate 1 Jane Doe 30 Doe NJ 2 Mr. John Smith 51 Smith MA 3 Nate Cox, Esq. 45 Cox CT 4 Bill Lee III 38 Lee NY 5 Ms. Kate Smith 20 Smith MA
内容的提问来源于stack exchange,提问作者Jess CT
相关产品推荐
相关产品推荐

