从Character类型的日期时间变量中提取完整年份
从字符型日期时间中提取年份(R语言)
针对字符型的日期时间列df$DTS(示例值:2/14/21 4:55),以下两种方法可提取出4位年份(如2021):
方法1:转换为日期时间类型后提取
先将字符型数据转换为标准日期时间对象,再提取年份,这是更稳妥的方式,能避免字符串格式不一致导致的错误:
基础R实现
# 转换为POSIXct格式,匹配"月/日/两位年 时:分"的格式 df$datetime_col <- as.POSIXct(df$DTS, format = "%m/%d/%y %H:%M") # 提取4位年份 df$year <- format(df$datetime_col, "%Y")
lubridate包简化实现
lubridate包能自动识别常见日期格式,代码更简洁:
library(lubridate) # 直接转换并提取年份 df$year <- year(mdy_hm(df$DTS))
方法2:直接字符串处理
如果确定所有日期格式统一为月/日/两位年 时间,可以直接通过字符串操作提取年份部分:
分割字符串法
# 按"/"和空格分割,取第三位(两位年份)并补"20" df$year <- paste0("20", sapply(strsplit(df$DTS, "/| "), function(x) x[3]))
正则匹配法
# 用正则匹配提取"/"后的两位年份,补"20" df$year <- paste0("20", sub(".*/(\\d{2}).*", "\\1", df$DTS))
注意:如果数据中包含19xx年的日期(如
12/31/99 10:00),上述字符串方法会得到2099,这种情况建议优先使用方法1,转换日期时系统会自动识别(需确保R的cutoff.year参数设置正确,默认是当前年份减69)。
内容的提问来源于stack exchange,提问作者Jamie
相关产品推荐
相关产品推荐

