【问题标题】:Formatting inconsistent datetime variable [duplicate]格式化不一致的日期时间变量[重复]
【发布时间】:2018-02-16 08:38:58
【问题描述】:

我有一个大型数据集(几百万个观察值),其中包含格式不一致的日期时间变量: "%Y-%m-%d %H:%M:%S" ; “%m/%d/%Y 和 %H:%M:%S”。

数据集如下所示:

df <- data.frame(var1 = c(1:6), 
   var2 = c("A", "B", "C", "A", "B", "C"), 
   datetime = c("2013-07-01 00:00:02", "2016-07-01 00:00:01", 
            "9/2/2014 00:01:20", "9/1/2014 00:00:25",
            "1/1/2015 0:07", "6/1/2015 0:01"))

有没有一种有效的方法可以将 datetime 变量格式化为唯一、一致的日期时间格式?

【问题讨论】:

  • 如果您没有不明确的日期(例如 2014 年 9 月 2 日),您可以使用任何时间包中的 anytime。事实上,您只能将as.POSIXct 与您数据中的所有格式一起使用,并将结果合并到一个向量中

标签: r date datetime format


【解决方案1】:

你可以像这样使用 lubridate 包。

lubridate::parse_date_time(x = df$datetime, c("ymd HMS","mdy HMS"))

[1] "2013-07-01 00:00:02 UTC" "2016-07-01 00:00:01 UTC" "2014-09-02 00:01:20 UTC"
[4] "2014-09-01 00:00:25 UTC" NA                        NA                       
Warning message:
 2 failed to parse. 

lubridate::parse_date_time(x = df$datetime, c("ymd HMS","mdy HMS","mdy HM"))

[1] "2013-07-01 00:00:02 UTC" "2016-07-01 00:00:01 UTC" "2014-09-02 00:01:20 UTC"
[4] "2014-09-01 00:00:25 UTC" "2015-01-01 00:07:00 UTC" "2015-06-01 00:01:00 UTC"

您可以根据需要指定日期时间格式,您可以比较我提到的两个示例。

希望这对您有所帮助。 :)

【讨论】:

    【解决方案2】:

    POSIXCT 解决方案使用parse_date_time

    编辑:合并@Akarsh Jain 的POSIXCT 格式以实现更好的时间对齐。

    df$new_date <- parse_date_time(df$datetime, c("%Y-%m-%d %H:%M:%S", "%m/%d/%Y %H:%M:%S", "%m/%d/%Y %H:%M"))
    

    【讨论】:

    • 是的...我正要发这个df$datetime &lt;- parse_date_time(df$datetime, c("%Y-%m-%d %H:%M:%S", "%m/%d/%Y %H:%M:%S", "%m/%d/%Y %H:%M"))
    • 我刚刚发布了相同的@D.sen。巧合的是。我希望你不会介意。
    • ^ 这是一个更好的答案,因为我意识到我的解决方案是将 7 分钟调整为 7 秒。
    • 是的! (Y),只是略有改善。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-07-07
    • 2020-11-05
    • 2017-03-31
    • 1970-01-01
    • 2021-04-06
    • 1970-01-01
    相关资源
    最近更新 更多