在dplyr select中使用perl = TRUE正则表达式
发布时间:2020-12-15 23:37:42 所属栏目:大数据 来源:网络整理
导读:如何使用perl = TRUE选择cols,如正则表达式. data.frame(baa=0,boo=0,boa=0,lol=0,bAa=0) %% dplyr::select(matches("(?i)b(?!a)")) Error in grep(needle,haystack,…) : invalid regular expression ‘(?i)b(?!a)’,reason ‘Invalid regexp’ 正则表达式
如何使用perl = TRUE选择cols,如正则表达式.
data.frame(baa=0,boo=0,boa=0,lol=0,bAa=0) %>% dplyr::select(matches("(?i)b(?!a)"))
正则表达式确实有效. grep("(?i)b(?!a)",c("baa","boo","boa","lol","bAa"),perl=T) > [1] 2 3 有快捷功能/方式吗? 解决方法
dplyr中的匹配项不支持perl = TRUE.但是,您可以自己创建功能.在对源代码进行一些挖掘之后,这可以工作:
快捷方式: library(dplyr) #notice the 3 colons because grep_vars is not exported from dplyr matches2 <- function (match,ignore.case = TRUE,vars = current_vars()) { dplyr:::grep_vars(match,vars,ignore.case = ignore.case,perl = TRUE) } data.frame(baa=0,bAa=0) %>% select(matches2("(?i)b(?!a)")) #boo boa #1 0 0 或者更具解释性的解决方案 matches2 <- function (match,vars = current_vars()) { grep_vars2(match,ignore.case = ignore.case) } #this is pretty much my only change in the original dplyr:::grep_vars #to make it accept perl. grep_vars2 <- function (needle,...) { grep(needle,perl = TRUE,...) } data.frame(baa=0,bAa=0) %>% select(matches2("(?i)b(?!a)")) #boo boa #1 0 0 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |