首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >矢量化str_locate不按预期工作

矢量化str_locate不按预期工作
EN

Stack Overflow用户
提问于 2020-05-07 00:30:53
回答 2查看 269关注 0票数 2

我有以下数据框架:

代码语言:javascript
运行
复制
df <- data.frame(string=c('abcde', 'cde'))

我想在每个字符串中找到"de“的结尾位置,我可以这样确定:

代码语言:javascript
运行
复制
df %>% 
 rowwise() %>%
 mutate(pos=str_locate(string = string, pattern = "de")[2])

##   string    pos
##    abcde      5
##      cde      3

这是预期的输出,但是我不希望使用rowwise(),因为它对于大数据帧非常慢。

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

代码语言:javascript
运行
复制
Vstr_locate <- Vectorize(str_locate)

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

但这不管用:

代码语言:javascript
运行
复制
##   string    pos
##    abcde      5
##      cde      5

问题:

为什么我的矢量化函数不能工作?rowwise()

  • :如何不用获得预期的输出?
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-05-07 01:01:35

str_locate已经矢量化,不需要rowwiseVectorize

代码语言:javascript
运行
复制
df %>% mutate(pos=str_locate(string = string, pattern = "de")[, 2])
#   string pos
# 1  abcde   5
# 2    cde   3
票数 4
EN

Stack Overflow用户

发布于 2020-05-07 00:51:00

括号中需要一个逗号。

代码语言:javascript
运行
复制
df %>% 
  #rowwise() %>%
  mutate(pos=Vstr_locate(string = string, pattern = "de")[2,])
  string pos
1  abcde   5
2    cde   3

查看这两个函数的输出

代码语言:javascript
运行
复制
str_locate(string = "abcde", pattern = "de")
     start end
[1,]     4   5

代码语言:javascript
运行
复制
Vstr_locate(string = "abcde", pattern = "de")
     abcde
[1,]     4
[2,]     5

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

代码语言:javascript
运行
复制
library(purrr)
strings <- c('abcde', 'cde')
map(strings, str_locate, "de")
[[1]]
     start end
[1,]     4   5

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

代码语言:javascript
运行
复制
map(strings, Vstr_locate, "de")
[[1]]
     abcde
[1,]     4
[2,]     5

[[2]]
     cde
[1,]   2
[2,]   3

您想要的元素被索引为[2,]Vstr_locate

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61647818

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档