匹配第一个元素时,字符串矢量化失败

时间:2018-07-01 05:08:37

标签: r tidyverse stringr

使用stringr并搜索长度大于1的pattern时遇到了奇怪的事情。我想最终将str_whichpurrr::map()一起使用,如下: / p>

searcher <- c("new1", "var1")
purrr::map(data, function(x), any(str_which(x, searcher)))

样本数据

library(stringr)
data <- dplyr::tibble(
                         a = 1:8,
                         b = rep(paste0("var", 1:2), each = 4),
                         c = rep(paste0("new", 1:4), 2))
str_which(data$c, c("new1", "var1"))
#[1] 1 5
str_which(data$c, c("var1", "new1"))
#integer(0)
str_which(data$b, c("var1", "new1"))
#[1] 1 3
str_which(data$b, c("new1", "var1"))
#[1] 2 4
str_which(data$a, c(2, "var1"))
#integer(0)
str_which(data$a, c(3, "var1"))
#[1] 3

此外,我注意到str_locate的奇怪行为:

str_locate(data$b, c("new1", "var1"))
#     start end
#[1,]    NA  NA
#[2,]     1   4
#[3,]    NA  NA
#[4,]     1   4
#[5,]    NA  NA
#[6,]    NA  NA
#[7,]    NA  NA
#[8,]    NA  NA

1 个答案:

答案 0 :(得分:0)

正如nicola指出的,如果您向str_locate提供一个字符串向量,它将回收参数。而是尝试使用OR(|)运算符。尝试类似的东西,

str_locate(data$b, "new1|var1")

     start end
[1,]     1   4
[2,]     1   4
[3,]     1   4
[4,]     1   4
[5,]    NA  NA
[6,]    NA  NA
[7,]    NA  NA
[8,]    NA  NA 

我认为这就是您要寻找的东西

purrr::map(data, function(x)str_which(x, "new1|var1"))
$a
integer(0)

$b
[1] 1 2 3 4

$c
[1] 1 5