【问题标题】:Mixed Date formats in R data frameR数据框中的混合日期格式
【发布时间】:2020-02-13 07:26:18
【问题描述】:

您如何处理混合日期类型的列,例如 2020 年 8 月 2 日、2020 年 2 月 7 日,所有这些都反映了 2 月, 我试过 zoo::as.Date(mixeddatecolumn,"%d/%m/%Y")。第一个是对的,但第二个是错的。

我也在这里尝试过解决方案 Fixing mixed date formats in data frame? 但问题似乎与我正在处理的不同。

【问题讨论】:

    标签: r dataframe date-format


    【解决方案1】:

    即使像 '8/2/2020' 这样的日期是 2 月 8 日还是 8 月 2 日,即使是人类也很难知道。但是,我们可以利用您知道所有这些日期都在 2 月这一事实,并删除代表月份的日期的“2”部分,并以一种标准格式排列日期,然后将日期转换为实际的 Date 对象。

    x <- c('8/2/2020','2/7/2020')
    lubridate::mdy(paste0('2/', sub('2/', '', x, fixed = TRUE)))
    #[1] "2020-02-08" "2020-02-07"
    

    或在基础 R 中相同:

    as.Date(paste0('2/', sub('2/', '', x, fixed = TRUE)), "%m/%d/%Y")
    

    【讨论】:

      【解决方案2】:

      因为我们知道每个月都是二月,所以搜索 /2/ 或 /02/ 如果找到中间的数字就是月份;否则,第一个数字是月份。在任何一种情况下,适当设置格式并使用as.Date。没有使用任何包。

      dates <- c("8/2/2020", "2/7/2020", "2/28/2000", "28/2/2000") # test data
      
      as.Date(dates, ifelse(grepl("/0?2/", dates), "%d/%m/%Y", "%m/%d/%Y"))
      ## [1] "2020-02-08" "2020-02-07" "2000-02-28" "2000-02-28"
      

      【讨论】:

        猜你喜欢
        • 2021-09-14
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-01-11
        • 2018-12-27
        • 1970-01-01
        相关资源
        最近更新 更多