Regex dplyr能否使用by=中的正则表达式连接两个数据帧?

Regex dplyr能否使用by=中的正则表达式连接两个数据帧?,regex,r,join,dplyr,Regex,R,Join,Dplyr,有没有一种方法可以使用dplyr的连接运算符连接两个数据帧,但使用正则表达式而不是直接的by=c('foo'='bar') 比如: people <- data.frame( id = 1:10 , emp = c("Caterpillar", "FEMA", "Community Hospital", "Gessert Grp.", "AT&T", "IBM Corp.", NA, "Smartguy Community College", NA, NA))

有没有一种方法可以使用dplyr的连接运算符连接两个数据帧,但使用正则表达式而不是直接的by=c('foo'='bar')

比如:

people  <- data.frame(
     id = 1:10
   , emp = c("Caterpillar", "FEMA", "Community Hospital", "Gessert Grp.", "AT&T", "IBM Corp.", NA, "Smartguy Community College", NA, NA))



employers  <- data.frame(
     employerID     = c(1, 2, 3, 4, 5)
   , employerName   = c("Caterpillar Foundation", "Eli Lilly and Company Foundation Inc.", "Archer Daniels Midland Co", "IBM Corporation", "State Farm Co.  Foundation Matching Gifts")
   , employerRegexp = c("Caterpillar", "El *Lilly", "Archer *Daniels|ADM", "IBM", "State *Farm")
   )

peoplewRealEmployerNames  <- people  %>% 
     left_join(employers,by=c('emp' ~= 'employerRegexp')

people包
fuzzyjoin
就是这样做的,它使用了与
dplyr
差不多的语法

因此,您只需将代码中的最后两行更改为:

library(fuzzyjoin)

peoplewRealEmployerNames <- people %>%
  regex_left_join(employers, by=c('emp' = 'employerRegexp'))
库(fuzzyjoin)
员工人数百分比
regex_left_join(雇主,by=c('emp'='employeerregexp'))

您可以在连接之前使用
grep
-like regex函数获取要在连接中使用的列名,然后查看如何使用字符向量作为dplyr连接的输入。“雇主”的代码不会运行。请编辑。@docendo discimus,仅凭
setNames()
一项,该FAQ就值入场费。我一直想知道是否有一种方法可以实现
names(foo)%someFunction()%%>%setNames(c(“foo”、“bar”、“baz”)%%>%moreFunctions()
@crazybilly,很高兴知道。你认为我们可以在那时将这个问题作为另一个问题的副本来结束吗?或者你想自己回答吗?为了清楚起见,请注意:如示例所示,正则表达式应该位于右侧数据框中。左侧数据框中的列是将要搜索的字符串。