【问题标题】:How do I convert dd/mm/yyyy hh:mm:ss to dd-mm-yy hh:mm in R?如何在 R 中将 dd/mm/yyyy hh:mm:ss 转换为 dd-mm-yy hh:mm?
【发布时间】:2018-03-05 11:39:21
【问题描述】:

我有时间戳作为字符类型的数据帧,格式为dd-mm-yyyy hh:mm
例如:

"05-02-2018 06:30"

我需要mm-dd-yyyy hh:mm格式的输出,即:

"02-05-2018 06.30"

我尝试了使用函数 mdy() 和 as.POSIXct 的 lubridate 库
但它不适用于所有记录 -
很少有它抛出警告消息"failed to parse."
它主要用于 day is > 12 的日期,例如:

"19-06-2017 16:30"
"22-10-2017 11:45"
"14-09-2017 16:00"

【问题讨论】:

    标签: r datetime


    【解决方案1】:

    使用?strptime() 显示帮助。在帮助文件中有一个格式属性列表,您在使用strptime() 时必须指定这些属性:

    strptime() help

    对您的问题最重要的是:

    %d 以十进制数表示的月份中的日期 (01–31)。

    %H 小时为十进制数 (00–23)。作为一个特殊的例外字符串,例如 24:00:00 被接受作为输入,因为 ISO 8601 允许这些。

    %m 以十进制数表示的月份 (01–12)。

    %M 分钟为十进制数 (00–59)。

    %Y 有世纪的年份。请注意,虽然原始公历中没有零,但 ISO 8601:2004 将其定义为有效(解释为 1BC):请参阅https://en.wikipedia.org/wiki/0_(year)。请注意,标准还规定,其日历中 1582 年之前的年份只能在有关各方同意的情况下使用。

    字符串的一部分也是一个分隔符。在你的情况下“-”。

    然后您可以使用 strptime() 和 format() 交换月份和日期。使用您的示例:

    dates <- c( "19-06-2017 16:30" ,"22-10-2017 11:45", "14-09-2017 16:00")
    dates <- strptime(dates, format="%d-%m-%Y %H:%M")
    dates_changed <- format(dates, "%m-%d-%Y %H:%M")
    

    【讨论】:

      【解决方案2】:

      Lubridate 的 dmy_hms 功能有效。

      方法一:

      library(lubridate)
      dts <- c("19-06-2017 16:30" ,"22-10-2017 11:45", "14-09-2017 16:00")
      dts <- dmy_hms(dts)
      print(dts)
      
      [1] "19-06-2017 16:30" "22-10-2017 11:45" "14-09-2017 16:00"
      

      方法二:

      library(lubridate)
      dts <- c("19-06-2017 16:30" ,"22-10-2017 11:45", "14-09-2017 16:00")
      dts <- fast_strptime(dts, format = '%d-%m-%Y %H:%M')
      print(dts)
      
      [1] "2017-06-19 16:30:00 UTC" "2017-10-22 11:45:00 UTC" "2017-09-14 16:00:00 UTC"
      

      【讨论】:

      • > library(lubridate) > dts dts dts [1] "2020-06-19 17:16:30 UTC" "2020-10-22 17:11:45 UTC" "2020-09-14 17:16 :00 UTC" > dts
      • 这很奇怪,因为我没有收到任何此类错误。无论如何,我添加了应该有效的方法 2。请检查。
      【解决方案3】:

      查看strptime() 函数的帮助以更好地格式化您的时间/日期。

      您可以在这里使用多种方法。

      请参阅此链接中lubridate 包的小抄:Lubridate

      【讨论】:

      • 我相信 strptime() 来自基础 R,而不是 lubridate
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-01-14
      • 1970-01-01
      • 1970-01-01
      • 2018-10-28
      • 1970-01-01
      • 2017-04-08
      • 1970-01-01
      相关资源
      最近更新 更多