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

R语言如何将长文本日期格式转换为简洁的y-m-d格式

问题原因

你原有代码的逻辑顺序错误:

  • 你数据里的Time列初始为字符串类型,而format()函数仅支持对已转换为日期/时间类型的对象做格式输出,不能直接用来解析字符串格式的日期。
  • 你跳过了「把原始字符串解析为日期时间类型」的核心步骤,直接调用format()会返回空值,后续的as.Date转换自然无法生效。

解决方法

方法1:基础R+dplyr实现

如果不想额外安装第三方包,可以用as.POSIXct先解析原始日期字符串:

注意:如果你的系统为中文环境,无法识别英文月份缩写,运行代码前先执行Sys.setlocale("LC_TIME", "C")修改时间区域设置。

library(dplyr)
# 先修改时间区域(中文系统必加)
Sys.setlocale("LC_TIME", "C")

data2 <- data1 %>%
  # 第一步:解析原始字符串为日期时间类型,格式符和原始数据一一对应
  mutate(Time = as.POSIXct(Time, format = "%d %b %Y %H:%M:%S")) %>%
  # 第二步:转换为%Y-%m-%d格式的日期类型
  mutate(Time1 = as.Date(Time))

如果需要Time1为字符串格式的y-m-d,把最后一步替换为mutate(Time1 = format(Time, "%Y-%m-%d"))即可。

方法2:使用lubridate包(更简便)

lubridate包内置了智能日期解析函数,不需要手动匹配格式符,出错概率更低:

library(dplyr)
library(lubridate)

data2 <- data1 %>%
  # dmy_hms自动识别「日-月-年 时:分:秒」格式的字符串,date()直接提取日期部分
  mutate(Time1 = date(dmy_hms(Time)))

两种方法运行后,Time1列就是你需要的Y-m-d格式的日期,对应你的示例数据第一行转换结果为2019-04-05。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 09:45:05