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

在R语言中剥离字符串首尾内容,提取中间六位数字

提取precinct_no列中间的六位数字(R语言实现)

针对你提供的precinct_no列格式(四位数字-六位数字-城镇名称),这里提供几种高效处理3000行数据的方法:

方法1:Base R 原生函数(无需额外包)

利用strsplit按分隔符-拆分字符串,直接提取拆分后的第二个元素:

# 构造示例数据框
df <- data.frame(
  precinct_no = c(
    "0001-100000-SAN PASQUAL",
    "0002-100090-SAN PASQUAL",
    "0003-100120-SAN PASQUAL",
    "0004-100150-SAN PASQUAL",
    "0005-105000-RANCHO BERNARDO",
    "0006-105040-RANCHO BERNARDO"
  ),
  newsom_count = c(5, 567, 0, 0, 572, 609),
  dahle_count = c(18, 622, 0, 0, 538, 582),
  difference = c(-13, -55, 0, 0, 34, 27)
)

# 提取中间六位数字
df$middle_6digits <- sapply(strsplit(df$precinct_no, "-"), function(x) x[2])

方法2:Base R 正则表达式替换(精准匹配格式)

用sub函数通过正则表达式精准匹配并保留目标内容,适合格式严格统一的场景:

df$middle_6digits <- sub("^\\d{4}-(\\d{6})-.+$", "\\1", df$precinct_no)

正则说明:

  • ^\\d{4}-:匹配开头的四位数字加横杠
  • (\\d{6}):捕获中间的六位数字(括号为捕获组)
  • -.+$:匹配横杠及后面的所有内容
  • \\1:替换为第一个捕获组的内容(即中间六位数字)

方法3:stringr 包简洁实现

如果习惯使用tidyverse生态,stringr的函数可以快速提取匹配内容:

library(stringr)
# 直接提取字符串中的六位数字(适合无其他六位数字干扰的场景)
df$middle_6digits <- str_extract(df$precinct_no, "\\d{6}")
# 精准匹配分隔符之间的六位数字(更严谨)
df$middle_6digits <- str_match(df$precinct_no, "-(\\d{6})-")[,2]

以上三种方法都能高效处理3000行数据,可根据你的代码习惯选择。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 07:40:36