矢量化str_locate未按预期工作

矢量化str_locate未按预期工作,r,dplyr,stringr,R,Dplyr,Stringr,我有以下数据框: df <- data.frame(string=c('abcde', 'cde')) 这是预期的输出,但我不希望使用rowwise(),因为它对于大数据帧非常慢 因此,我尝试将函数矢量化并删除rowwise()命令: Vstr_locate <- Vectorize(str_locate) df %>% #rowwise() %>% mutate(pos=Vstr_locate(string = string, pattern = "de")[

我有以下数据框:

df <- data.frame(string=c('abcde', 'cde'))
这是预期的输出,但我不希望使用
rowwise()
,因为它对于大数据帧非常慢

因此,我尝试将函数矢量化并删除
rowwise()
命令:

Vstr_locate <- Vectorize(str_locate)

df %>% 
 #rowwise() %>%
 mutate(pos=Vstr_locate(string = string, pattern = "de")[2])
问题:

  • 为什么我的矢量化函数不能工作
  • 如何在不使用
    rowwise()
    的情况下获得预期的输出
括号中需要一个逗号

df %>% 
  #rowwise() %>%
  mutate(pos=Vstr_locate(string = string, pattern = "de")[2,])
  string pos
1  abcde   5
2    cde   3
看看这两个函数的输出

str_locate(string = "abcde", pattern = "de")
     start end
[1,]     4   5
vs

类似地,如果将每个应用于列表

library(purrr)
strings <- c('abcde', 'cde')
map(strings, str_locate, "de")
[[1]]
     start end
[1,]     4   5

[[2]]
     start end
[1,]     2   3

您想要的元素被索引为
[2,]
,带有
Vstr\u locate
str\u locate
已矢量化,无需
按行
矢量化

df %>% mutate(pos=str_locate(string = string, pattern = "de")[, 2])
#   string pos
# 1  abcde   5
# 2    cde   3
Vstr_locate(string = "abcde", pattern = "de")
     abcde
[1,]     4
[2,]     5
library(purrr)
strings <- c('abcde', 'cde')
map(strings, str_locate, "de")
[[1]]
     start end
[1,]     4   5

[[2]]
     start end
[1,]     2   3
map(strings, Vstr_locate, "de")
[[1]]
     abcde
[1,]     4
[2,]     5

[[2]]
     cde
[1,]   2
[2,]   3
df %>% mutate(pos=str_locate(string = string, pattern = "de")[, 2])
#   string pos
# 1  abcde   5
# 2    cde   3