【问题标题】:Convert a mm-yy string "Jan-01" into date format [duplicate]将 mm-yy 字符串“Jan-01”转换为日期格式 [重复]
【发布时间】:2012-05-18 03:55:05
【问题描述】:

我的原始 Excel 文件中的日期以“Jan-01”的格式表示每月数据。当然,我可以先在 Excel 中手动将它们转换成更有用的东西,然后再输入到 R 中。

如何将此类日期转换为 R 中的 Date 类?

【问题讨论】:

  • 正如标题中明确提到的,它是月份和年份,而不是月份和日期。 strptime("Jan-01","%b-%d") [1] "2012-01-01" > strptime("Jan-01","%b-%y") [1] 不适用
  • 在前面加 1 代表当月的第一天:datevar <- "Jan-01"; as.Date(paste("01",datevar,sep="-"),"%d-%b-%y");

标签: r date


【解决方案1】:

如果你想要一个date 类,使用 as.Date:

x <- "Jan-01"
as.Date(paste("01-", x, sep = ""), format = "%d-%b-%y")

如果您想要 POSIXct 类,请考虑使用 lubridate

library(lubridate)
x <- "Jan-01"
dmy(paste("01-", x , sep =""))

如果你只想依赖base

x <- "Jan-01"
as.POSIXct(paste("01-", x, sep = ""), format = "%d-%b-%y")

【讨论】:

  • 正如 OP 所指出的,您的第一个 as.Date 给出了 NA 结果,因为 R 无法猜测完整日期。
  • lubridate 方便地具有 my 函数,dmypaste 因此没有必要。
【解决方案2】:

编辑:

最简单的方法是在 zoo 中使用 yearmon 类:

 require(zoo)
 as.yearmon(x, "%b-%y")
#[1] "Jan 2001"

稍微长一点的方法:

 x="Jan-01"
 xs<-strsplit(x, "-")
 xd <- as.Date( xs[[1]][2], paste( xs[[1]][1], "01",  sep="-"), format="%y-%b-%d")
 xd
#[1] "2001-01-01"

如果你想处理一串日期,那么你可能需要使用sapply如果选择第二种方法来制作年向量和月向量

【讨论】:

  • 请看标题,是年月,不是月日。 > xd xd [ 1] NA > xd xd [1] NA > xd xd [1] 不适用
  • 好的,很容易修复。两位数年份的格式规范是 %y 而不是 %Y
【解决方案3】:

如果你强制指定月份的第一天,你可以这样转换日期:

datevar <- c("Jan-01","Feb-01","Mar-12")
as.Date(paste("01",datevar,sep="-"),"%d-%b-%y")

需要注意的是,这与 DWin 下面给出的答案基本相同,只是手动指定日期而不是年份。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-07-06
    • 1970-01-01
    • 1970-01-01
    • 2021-01-31
    • 2023-02-22
    • 2019-07-24
    • 2020-05-12
    • 2016-07-30
    相关资源
    最近更新 更多