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

R语言如何从dataframe格式混杂的日期列中仅提取年份?

混杂格式字符日期列提取年份解决方案

你之前的代码无法得到预期输出的核心原因是df$DoB为字符类型,format()、year()等日期处理函数仅支持日期/日期时间类输入,未做类型转换直接调用会返回错误或NA。

以下是两种常用的实现方案:


方案1:使用lubridate包解析(推荐,容错率高)

适合多种混杂日期格式并存的场景,可自定义适配所有可能的日期格式:

# 未安装包先运行 install.packages("lubridate")
library(lubridate)

# orders参数按你实际存在的日期格式调整,以下是常见格式示例
# 示例覆盖:仅年份、横杠分隔年月日、斜杠分隔年月日、带时分秒的完整时间、斜杠分隔带时间的格式
df$DoB_parsed <- parse_date_time(df$DoB, orders = c(
  "%Y", "%Y-%m-%d", "%Y/%m/%d", "%m/%d/%Y",
  "%Y-%m-%d %H:%M:%S", "%m/%d/%Y %H:%M"
))

# 提取年份,自动转为数值型
df$Year <- year(df$DoB_parsed)

提取后可运行table(is.na(df$Year))查看解析失败的行数,针对失败样本调整orders内的格式即可。


方案2:正则表达式提取(无需额外安装包)

仅适用于DoB列内无其他非年份的4位连续数字的场景:

# 提取字符串中首次出现的4位连续数字作为年份,返回字符型
df$Year <- sub(".*?(\\d{4}).*", "\\1", df$DoB)

# 如需转为数值型可额外运行
df$Year <- as.integer(df$Year)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 03:45:04