在R中用grepl搜索时转发NA

时间:2016-08-30 09:11:48

标签: r grepl

有没有办法用grepl进行搜索而不是覆盖NA?

grepl('test', c(NA, 'test','bla',NA))
# [1] FALSE  TRUE FALSE FALSE

我很想得到NA TRUE FALSE NA

2 个答案:

答案 0 :(得分:2)

或者,您可以使用Hadley Wickham的 stringr 包中的str_detect(string, pattern)

> library(stringr)
> str_detect(c(NA, 'test','bla',NA), 'test')
[1]    NA  TRUE FALSE    NA

请注意,与grepl()相比,参数的顺序相反。

答案 1 :(得分:1)

使用grepl,我们可以尝试使用is.na来获得预期的输出

as.logical(NA^is.na(v1) * grepl("test", v1))
#[1]    NA  TRUE FALSE    NA

ifelse

ifelse(is.na(v1), NA, grepl("test", v1))
#[1]    NA  TRUE FALSE    NA

ifelse(is.na(v2), NA, grepl("test", v2))
#[1]    NA  TRUE FALSE    NA  TRUE

replace

replace(grepl("test", v2), is.na(v2), NA)
#[1]    NA  TRUE FALSE    NA  TRUE

数据

v1 <- c(NA, 'test','bla',NA)
v2 <- c(v1, "test run")