在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
相关产品推荐
相关产品推荐

