【问题标题】:Formatting Unconventional Date格式化非常规日期
【发布时间】:2017-08-01 14:32:04
【问题描述】:

我在格式化 R 中的日期列表时遇到问题。在 R 中格式化的传统方法,例如 as.Date 或 as.POSIXct 似乎不起作用。

我的日期格式为:1012015

使用

as.POSIXct(as.character(data$Start_Date), format = "%m%d%Y")

没有给我错误,但我的日期返回

"0015-10-12" 因为月份不是两位数。

有没有办法把它改成正确的日期格式?F

【问题讨论】:

  • 是否可以对格式做出任何一般性假设,例如最后 4 位总是年份,前 2-4 位是月份和日期(如果是,则为 111 Nov 1st 或 Jan 11)?
  • 是的,最后 4 位数字始终是年份,前 2-4 位数字是月份和日期。数据按时间顺序排列,但我不确定 R 是否能够就您的问题做出区分。
  • 正确答案是什么

标签: r date formatting


【解决方案1】:

lubridate 包可以帮助解决这个问题:

lubridate::mdy(1012015)
[1] "2015-01-01"

格式看起来模棱两可,但 OP 给出了两个提示:

  • 他在自己的尝试中使用了format = "%m%d%Y",并且
  • 他认为问题是 因为月份不是两位数

【讨论】:

    【解决方案2】:

    这仅使用基数 R。%08d 指定要格式化为 8 个字符的数字,在本例中为 "01012015"

    as.POSIXct(sprintf("%08d", 1012015), format = "%m%d%Y")
    ## [1] "2015-01-01 EST"
    

    请注意,如果您没有任何小时/分钟/秒,则使用 "Date" 类将不太容易出错,因为这样就消除了微妙的时区错误的可能性。

    as.Date(sprintf("%08d", 1012015), format = "%m%d%Y")
    ## [1] "2015-01-01"
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-09-23
      • 2016-01-10
      相关资源
      最近更新 更多