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

