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

R中使用stringr提取字符串指定片段及substr丢失变量问题求助

问题原因

你执行的dat2 <- substr(dat2$route, 6, 7)代码直接将substr()返回的字符向量赋值给了整个dat2对象。原本dat2是包含多列的数据集,执行该语句后会被直接覆盖为仅含提取结果的一维向量,因此会丢失其余11个变量。

正确实现方案

要求使用tidyverse相关包的前提下,更推荐使用正则提取的方式,适配不同长度的r编号(如r10、r100也可以正常提取),不会因为路径前缀长度变化导致提取错误:

  • 方案1:dplyr::mutate + stringr::str_extract 实现,完整保留原有数据集
# 加载包,tidyverse已内置dplyr和stringr
library(tidyverse)

# 新增route_id列存储提取的r开头片段,原有列全部保留
dat2 <- dat2 %>%
  mutate(route_id = str_extract(route, "r\\d+"))

# 如果需要直接替换原route列的内容,将上方的route_id改为route即可
  • 方案2:如果坚持使用固定位置截取的逻辑,正确赋值方式为指定列名,不要覆盖整个数据集
# 给新列赋值,原有列不会丢失
dat2$route_id <- substr(dat2$route, 6, 7)

该方案仅适用于所有route字段前缀固定为data/、且r后面只有1位数字的场景,兼容性较差。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.23 21:54:03