【问题标题】:converting multiple date formats into one in r在r中将多种日期格式转换为一种
【发布时间】:2016-10-24 15:36:18
【问题描述】:

我正在处理具有多种日期格式的凌乱 Excel 文件

2016-10-17T12:38:41Z 
Mon Oct 17 08:03:08 GMT 2016
10-Sep-15
13-Oct-09
18-Oct-2016 05:42:26 UTC

我想将以上所有内容转换为yyyy-mm-dd 格式。我正在使用以下代码进行转换,但很多值即将到来。

as.Date(parse_date_time(df$date,c('mdy', 'ymd_hms','a b d HMS y','d b y HMS')))

我怎样才能一起完成所有这些。我已经阅读了类似案例的其他主题,但似乎对我的案例没有任何作用。 请帮忙

【问题讨论】:

  • parse_date_time(df$date, c('dmy', 'YmdT', 'abd T Y', 'dmYT'))

标签: r date


【解决方案1】:

如果我将'dmy' 添加到列表中,那么至少您示例中的所有案例都已成功解析:

 z <- c("2016-10-17T12:38:41Z", "Mon Oct 17 08:03:08 GMT 2016", 
 "10-Sep-15",  "13-Oct-09", "18-Oct-2016 05:42:26 UTC")

library(lubridate)
parse_date_time(z,c('mdy', 'dmy', 'ymd_HMS','a b d HMS y','d b y HMS'))
## [1] "2016-10-17 12:38:41 UTC" "2016-10-17 08:03:08 UTC"
## [3] "2015-09-10 00:00:00 UTC" "2009-10-13 00:00:00 UTC"
## [5] "2016-10-18 05:42:26 UTC"

您的大问题将是第三个和第四个元素:它们实际上分别是'ymd''dmy' 吗?我不确定任何逻辑如何让您自动检测这些差异……断章取义,“2010 年 9 月 15 日”和“2015 年 9 月 10 日”似乎都是完全合理的可能性……

为了它的价值,我还尝试了新的anytime package - 它只处理第一个和最后一个元素。

【讨论】:

    【解决方案2】:

    首先删除时间使得可以在orders 中仅指定三个备选方案来解析问题中的样本数据。这会将 10-Sep-1513-Oct-09 解释为 dmy 但如果您希望它们解释为 ymd 则取消注释掉注释掉的行:

    orders <- c("dmy", "mdy", "ymd")
    # orders <- c("ymd", "dmy", "mdy")
    
    as.Date(parse_date_time(gsub("..:..:..", " ", x), orders = orders))
    

    给予:

    [1] "2016-10-17" "2016-10-17" "2015-09-10" "2009-10-13" "2016-10-18"
    

    或者如果注释掉的行没有注释,那么:

    [1] "2016-10-17" "2016-10-17" "2010-09-15" "2013-10-09" "2016-10-18"
    

    注意:输入为:

    x <- c("2016-10-17T12:38:41Z ", "Mon Oct 17 08:03:08 GMT 2016", "10-Sep-15", 
    "13-Oct-09", "18-Oct-2016 05:42:26 UTC")
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-08-27
      相关资源
      最近更新 更多