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

R语言如何将字符型两位年份补全转换为四位完整年份

R语言两位字符型年份补全为四位年份的实现方案

测试样例数据

先加载依赖包、构造和问题描述一致的测试数据:

library(tidyverse)
test <- tibble(rep= "John Smith", quarter= "q2", year= 19:23, ideal_year= 2019:2023) %>%  mutate(year=as.character(year))

使用str_glue、paste0拼接未得到预期结果,通常是因为字段存在前后多余空格、或者拼接时触发了隐式类型转换,下面是几种可直接运行的可行方案:

方案1:直接字符串拼接(固定前缀场景首选)

先对年份字段做去空白处理,再拼接固定前缀,可根据需求选择输出字符型还是数值型:

test_res <- test %>%
  mutate(
    # 输出数值型四位年份,和示例中ideal_year格式一致
    full_year = paste0("20", str_trim(year)) %>% as.integer()
  )

如果需要保留字符格式,去掉末尾的%>% as.integer()即可。

方案2:格式化补位(兼容个位数年份场景)

如果数据中存在单数字存储的年份(比如9代表2009),用sprintf做固定长度格式化更稳妥,不会出现209这类错误结果:

test_res <- test %>%
  mutate(
    full_year = sprintf("20%02d", as.integer(str_trim(year))) %>% as.integer()
  )

代码中%02d的作用是将传入的年份值统一格式化为2位长度,不足2位时自动在前面补0。

方案3:日期解析函数(适配后续时序计算场景)

如果后续需要基于年份做日期运算,可以直接用日期解析函数处理,支持自定义跨世纪的年份分界点:

library(lubridate)
test_res <- test %>%
  mutate(
    full_year = year(ymd(paste0(str_trim(year), "-01-01"), cutoff_2000 = 68))
  )

参数说明:cutoff_2000 = 68是默认值,规则为00-68的两位年份解析为20xx,69-99的两位年份解析为19xx,如果你的数据年份分界规则不同,直接修改该参数值即可。


结果校验

运行以下代码,如果返回TRUE说明补全结果和预期完全一致:

all.equal(test_res$full_year, test_res$ideal_year)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 15:27:17