Regex dplyr能否使用by=中的正则表达式连接两个数据帧?
有没有一种方法可以使用dplyr的连接运算符连接两个数据帧,但使用正则表达式而不是直接的by=c('foo'='bar') 比如: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))
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,很高兴知道。你认为我们可以在那时将这个问题作为另一个问题的副本来结束吗?或者你想自己回答吗?为了清楚起见,请注意:如示例所示,正则表达式应该位于右侧数据框中。左侧数据框中的列是将要搜索的字符串。