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

从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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.21 08:27:38