返回匹配的逻辑向量:支持regexp?

时间:2010-10-01 14:38:19

标签: regex r

我想在字符向量上返回regexp匹配的逻辑向量,但是匹配或%in似乎不支持正则表达式,例如:

> x <- c("Bill", "Brett", "Jane")
> grep("^B", x)
[1] 1 2
> x %in% "^B"
[1] FALSE FALSE FALSE

我希望这回复

[1] TRUE TRUE FALSE

想法?

谢谢,

罗伯特

3 个答案:

答案 0 :(得分:6)

链接它:

> seq(along=(x)) %in% grep("^B", x)
[1]  TRUE  TRUE  FALSE

所以你可以给自己写一个小辅助函数来完成这两个函数。但我认为其中一个grep()变体也是如此......啊,是的,grepl()是你的朋友:

> grepl("^B", x)
[1]  TRUE  TRUE  FALSE

快速help(grep)无法治愈; - )

答案 1 :(得分:1)

使用grepl

> x <- c("Bill", "Brett", "Jane") 
> grepl("^B", x) 
[1]  TRUE  TRUE FALSE

修改

哎呀,似乎德克已经对他的答案进一步说明了这一点。为了新颖性,这里还有其他一些方法:

> ans <- rep(FALSE,length(x))
> ans[grep("^B",x)]<-TRUE
> ans
[1]  TRUE  TRUE FALSE


> 1:length(x) %in% grep("^B",x)
[1]  TRUE  TRUE FALSE

答案 2 :(得分:0)

一种方法是在函数中包含两个简单的步骤,我们得到grep()来做它的事情,但提供x中元素的索引作为调用的LHS %in%

foo <- function(x, pattern, ...) {
    seq_along(x) %in% grep(pattern, x, ...) 
}

我们得到您的示例数据:

> x <- c("Bill", "Brett", "Jane")
> foo(x, pattern = "^B")
[1]  TRUE  TRUE FALSE