You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

R语言中查找字符串第三个下划线位置并写入数据框

解决方案

问题分析

你之前用unlist(gregexpr('_', df$col1))[3]只拿到第一行的结果,是因为gregexpr会返回一个列表,每个元素对应一行字符串的下划线位置;unlist会把所有行的位置合并成一个一维向量,取[3]只是这个向量里的第三个值(也就是第一行的第三个下划线位置),而非每行的第三个。

方法一:Base R 实现

用sapply遍历gregexpr返回的列表,对每行的下划线位置取第三个值:

col1<- c('a_b_c_fv', 'ff_g1_h_fv','e_ii_jjjj_fv' )
df <- data.frame(col1)

# 提取每行第三个下划线的位置
df$location <- sapply(gregexpr('_', df$col1), function(x) x[3])

运行后df$location会得到c(6,8,10),完全符合预期。

方法二:stringr 包实现(更直观)

如果习惯用stringr包,可以用str_locate_all获取所有匹配位置,再提取第三个位置的起始值:

library(stringr)

df$location <- sapply(str_locate_all(df$col1, '_'), function(x) x[3, 1])

str_locate_all对每个字符串返回一个矩阵,每行对应一个下划线的start和end位置,取第三行的start列就是目标位置。


内容的提问来源于stack exchange,提问作者Log On

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.10 04:07:03