我有以下数据框架:
df <- data.frame(string=c('abcde', 'cde'))我想在每个字符串中找到"de“的结尾位置,我可以这样确定:
df %>%
rowwise() %>%
mutate(pos=str_locate(string = string, pattern = "de")[2])
## string pos
## abcde 5
## cde 3这是预期的输出,但是我不希望使用rowwise(),因为它对于大数据帧非常慢。
因此,我尝试将函数向量化并删除rowwise()命令:
Vstr_locate <- Vectorize(str_locate)
df %>%
#rowwise() %>%
mutate(pos=Vstr_locate(string = string, pattern = "de")[2])但这不管用:
## string pos
## abcde 5
## cde 5问题:
为什么我的矢量化函数不能工作?rowwise()
发布于 2020-05-07 01:01:35
str_locate已经矢量化,不需要rowwise或Vectorize:
df %>% mutate(pos=str_locate(string = string, pattern = "de")[, 2])
# string pos
# 1 abcde 5
# 2 cde 3发布于 2020-05-07 00:51:00
括号中需要一个逗号。
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与
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您想要的元素被索引为[2,]和Vstr_locate。
https://stackoverflow.com/questions/61647818
复制相似问题