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

如何从包含文本与数字的data frame列中提取纯数字内容

问题原因

你之前使用的substr(OLD$CHR, 4, 4)仅会提取字符串第4位的单个字符,遇到Chr14、Chr19这类数字长度≥2的取值时,只能提取到数字的第一位,因此无法得到预期结果。

正确实现方案

下面提供3种通用的实现方式,都可以满足需求:

  • 方案1:base R正则替换(无需额外安装包,通用性最强)
    用gsub删除所有非数字字符后转为整数即可:

    New$CHR_1 <- as.integer(gsub("\\D", "", OLD$CHR))
    

    其中\\D是正则语法,匹配所有非数字字符,替换为空后剩余内容就是你需要的纯数字。

  • 方案2:固定前缀截取(适合所有值都是Chr开头的场景)
    把substr的结束位置设置为字符串总长度,就可以完整提取前缀后的所有内容:

    New$CHR_1 <- as.integer(substr(OLD$CHR, 4, nchar(OLD$CHR)))
    
  • 方案3:tidyverse生态写法(适合已经在使用tidyverse系列包的场景)
    用stringr的str_extract直接提取连续数字:

    library(stringr)
    New$CHR_1 <- str_extract(OLD$CHR, "\\d+") %>% as.integer()
    

以上三种方案对你给出的示例值Chr1、Chr14、Chr19、Chr2、Chr8、Chr7,都可以输出预期的1、14、19、2、8、7结果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 05:06:03