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

R语言中从Series ID提取对应stateid并生成新变量的方法

从seriesid中提取匹配预定义stateid的解决方案

问题场景

现有包含seriesid列的数据框,每个seriesid字符串的SMU后两位对应州ID(stateid);同时有一个存储所有合法stateid的向量,需将每个seriesid对应的stateid提取为数据框新列。

示例数据

df <- data.frame(seriesid = c("SMU01000002000000001", "SMU01000002000000001", 
                 "SMU02000002000000001", "SMU04000002000000001", 
                 "SMU04000002000000001", "SMU09000002000000001"))
stateid <- c(1:2, 4:6, 8:13)
stateid[stateid<10] <- paste0('0', stateid[stateid<10])

实现方案

方法1:直接提取固定位置子串(高效简洁)

由于stateid固定在SMU后的两位(字符串第4-5位,R语言字符串索引从1开始),直接用substr()函数提取:

df$stateid <- substr(df$seriesid, start = 4, stop = 5)

执行后结果如下:

> df
                 seriesid stateid
1 SMU01000002000000001      01
2 SMU01000002000000001      01
3 SMU02000002000000001      02
4 SMU04000002000000001      04
5 SMU04000002000000001      04
6 SMU09000002000000001      09

方法2:匹配预定义stateid向量(合法性校验)

如果需要确保提取的stateid属于预定义的合法列表,可通过正则匹配实现:

# 生成匹配正则:匹配SMU后接合法stateid的模式
pattern <- paste0("SMU(", paste(stateid, collapse = "|"), ")")
# 提取匹配到的stateid
df$stateid <- sub(pattern, "\\1", df$seriesid)

该方法仅提取预定义stateid列表中的值,若seriesid中的stateid不在列表内,会保留原字符串(可根据需求调整异常处理逻辑)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 14:25:25