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

R语言:从身份编码中提取以19开头的四位出生年份

解决R中提取身份编码出生年份返回NA的问题

问题原因

你遇到的返回NA NA NA的核心原因,大概率是正则表达式使用了中文半角引号,导致R把引号本身当成了匹配规则的一部分,自然找不到符合要求的内容。少数情况可能是stringr版本过旧,但前者是最常见的诱因。

解决方案

方案1:用stringr包修正正则写法

确保使用英文半角引号包裹正则表达式,同时可以用\\d简化数字匹配的写法:

library(stringr)
test <- c("1234195212345600", "123419531234561","1234195412345689878")
# 两种写法效果一致
test_results <- str_extract(test, "19[0-9]{2}")
# test_results <- str_extract(test, "19\\d{2}")

执行后会得到你期望的结果:

> test_results
[1] "1952" "1953" "1954"

方案2:用base R实现(无需额外包)

如果不想依赖stringr,可以用base R自带的regmatches和regexpr组合完成提取:

test <- c("1234195212345600", "123419531234561","1234195412345689878")
test_results <- regmatches(test, regexpr("19[0-9]{2}", test))

补充说明

  • 如果你的字符串中存在多个以19开头的四位数字,str_extract只会提取第一个匹配项,刚好符合你提取出生年份的需求;
  • 若需要提取所有匹配项,可以改用str_extract_all函数。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.25 01:37:31