【发布时间】:2015-03-25 11:19:36
【问题描述】:
有没有办法使用 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')
显然,~= 不会真正起作用,但也许有类似的东西?
Dplyr 不是硬性要求,但它是我编写其余代码的风格,因此它是我的首选解决方案。
【问题讨论】:
-
您可以在连接前使用类似
grep的正则表达式函数来获取要在连接中使用的列名,然后查看this Q&A 以了解如何使用字符向量作为 dplyr 连接的输入。 -
“雇主”的代码不运行。请编辑。
-
@docendo discimus ,这个常见问题解答值得单独为
setNames()支付入场费。我一直想知道是否有办法在一个月的管道中执行names(foo) <- c("foo","bar","baz")!这样做会好很多:foo %>% someFunction() %>% setNames( c("foo","bar","baz") %>% moreFunctions() -
@crazybilly,很高兴知道。你认为我们可以把这个问题作为另一个问题的副本来结束吗?还是你想自己回答?