使用stringr
并搜索长度大于1的pattern
时遇到了奇怪的事情。我想最终将str_which
与purrr::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
答案 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