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

使用lubridate提取日期列年份时遇格式错误,寻求解决方法

问题:从日期列提取年份和月份时出现格式错误

需求是从date列生成年份和月份列,但执行R代码(基于lubridate包)提取年份时触发以下错误:

Error in as.POSIXlt.character(x, tz = tz(x)) :
character string is not in a standard unambiguous format

原代码如下:

library(lubridate)

# 创建示例日期
date = c("1/6/2022", "1/6/2022", "1/19/2022", "1/20/2022")

# 创建指定格式的日期列
date_final = format(lubridate::mdy(date), '%m-%d-%Y')

# 从`date_final`提取年份列
Year = lubridate::year(date_final)

错误原因

format()函数会将lubridate解析生成的日期对象转换为字符串类型,而lubridate::year()仅能处理日期/时间类型的对象,无法直接解析字符串,因此触发格式错误。


解决方案

无需用format()转换格式,直接基于lubridate解析后的日期对象提取年份和月份即可。若需要特定格式的日期字符串,可单独处理,但提取年份月份时必须保留日期类型。

修正后的代码:

library(lubridate)

# 创建示例日期
date = c("1/6/2022", "1/6/2022", "1/19/2022", "1/20/2022")

# 直接用mdy解析为日期类型,无需转成字符串
date_parsed = lubridate::mdy(date)

# 提取年份和月份
Year = lubridate::year(date_parsed)
Month = lubridate::month(date_parsed)

# 如果需要特定格式的日期字符串,再单独转换
date_final = format(date_parsed, '%m-%d-%Y')

# 查看结果
list(
  解析后的日期 = date_parsed,
  年份列 = Year,
  月份列 = Month,
  格式化日期字符串 = date_final
)

代码说明

  • lubridate::mdy()将字符串解析为Date类型对象,这是lubridate函数可直接处理的格式
  • year()和month()直接从日期对象提取数值,不会触发格式错误
  • 若需输出如%m-%d-%Y格式的字符串,再用format()转换,此步骤不影响年份月份的提取

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 17:52:12