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

