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

如何将R语言中的日期字符串从"10-1-2018"转为"2018-10-1"?

在R中转换日期字符串格式的方法

当然有办法解决这个问题!在R里处理日期格式转换很灵活,我给你两种实用方案:

方案1:直接拆分重组字符串(简单快速)

如果只是单纯调整日期各部分的顺序,不需要后续做日期计算,直接拆分字符串再拼接是最直接的方式:

# 处理"10-1-2018"
original_date <- "10-1-2018"
date_parts <- strsplit(original_date, "-")[[1]]
new_date <- paste(date_parts[3], date_parts[1], date_parts[2], sep = "-")
new_date
# 输出: "2018-10-1"

# 处理"1-1-2018"
original_date2 <- "1-1-2018"
date_parts2 <- strsplit(original_date2, "-")[[1]]
new_date2 <- paste(date_parts2[3], date_parts2[1], date_parts2[2], sep = "-")
new_date2
# 输出: "2018-1-1"

这个方法完全不需要依赖额外包,而且不管系统环境,都能保留原始数字的格式(不带前导零)。

方案2:转成日期对象再格式化(适合后续日期操作)

如果你之后还需要对日期做加减、提取年/月/日等操作,建议先把字符串转成R的日期对象,再按需格式化:

用base R实现

# 转换"10-1-2018"
date_obj <- as.Date("10-1-2018", format = "%m-%d-%Y")
# 注意:不同系统去除前导零的语法略有区别
# Windows系统
new_date <- format(date_obj, "%Y-%#m-%#d")
# Linux/macOS系统
new_date <- format(date_obj, "%Y-%-m-%-d")
new_date
# 输出: "2018-10-1"

# 转换"1-1-2018"同理
date_obj2 <- as.Date("1-1-2018", format = "%m-%d-%Y")
new_date2 <- format(date_obj2, "%Y-%#m-%#d") # Windows用这个,mac/Linux换%-m-%-d
new_date2
# 输出: "2018-1-1"

用lubridate包实现(更简洁)

lubridate是R中处理日期的热门包,语法更直观:

# 先安装包(第一次用的话)
install.packages("lubridate")
library(lubridate)

# 转换"10-1-2018"
date_obj <- mdy("10-1-2018") # mdy代表月-日-年的格式
new_date <- paste(year(date_obj), month(date_obj), day(date_obj), sep = "-")
new_date
# 输出: "2018-10-1"

# 转换"1-1-2018"
date_obj2 <- mdy("1-1-2018")
new_date2 <- paste(year(date_obj2), month(date_obj2), day(date_obj2), sep = "-")
new_date2
# 输出: "2018-1-1"

这样转成日期对象后,你还能轻松做比如date_obj + days(7)这样的日期运算,非常方便。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 09:52:21