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

如何在R语言中提取子串"sst"前的对应数字?

解决方案

可以通过正则表达式精准匹配"SST/sst"前的数字,结合R语言工具实现需求,以下是两种可行方法:

方法1:使用stringr包(语法简洁,推荐)

library(stringr)

# 匹配SST/sst前的数字片段,无匹配则返回NA
df1$num_sst <- str_extract(df1$bloods, "(\\d+)\\s*SST", ignore.case = TRUE)
# 提取片段中的纯数字部分
df1$num_sst <- str_extract(df1$num_sst, "\\d+")
# 将NA替换为0并转为数值型
df1$num_sst <- as.integer(replace(df1$num_sst, is.na(df1$num_sst), 0))

方法2:基础R实现(无需额外安装包)

# 用正则表达式匹配目标内容,提取捕获组
matches <- regexec("(\\d+)\\s*SST", df1$bloods, ignore.case = TRUE)
# 提取匹配到的数字,无匹配则返回NA
num_sst <- sapply(regmatches(df1$bloods, matches), function(x) if(length(x)>1) x[2] else NA)
# 替换NA为0并转为数值型
df1$num_sst <- as.integer(replace(num_sst, is.na(num_sst), 0))

最终输出结果

运行代码后,df1会新增num_sst列,结果如下:

> df1
  subject_id                  bloods num_sst
1    191-5467          2 SST, 1 EDTA       2
2    191-6784          1 EDTA 2 sst       2
3    191-3457           1SST, 2 EDTA       1
4    191-0987 2 EDTA, 1SST collected       1
5    191-1245           2SST, 1EDTA       2
6    191-1945               1 EDTA       0

正则表达式说明

  • (\\d+):捕获一个或多个连续数字,作为我们需要提取的目标值
  • \\s*:匹配0个或多个空格,兼容数字与SST之间有/无空格的情况
  • ignore.case = TRUE:忽略大小写,同时匹配大写的SST和小写的sst

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.13 15:42:37