【问题标题】:R: Create preferred date formatR:创建首选日期格式
【发布时间】:2019-12-18 16:47:46
【问题描述】:

我有一个数据框,其中有一列以各种方式存储日期。全部为数字或月份名称而不是数字,某些行缺少月份/天数:

Group   Date
1       14-7-2017
2       10-sep-2011
3       29-jul-2009
4       2016
5       dec-2018
6       NA

上例中的日期列是 as.character 格式。

我希望我的首选输出如下所示:

Group   Date
1       2017-7-14
2       2011-09-10
3       2009-07-29
4       2016-XX-XX
5       2018-12-XX
6       NA

格式变为Y-MM-DD,缺少的月/日将用XX填写。日期列中的 NA 可以保持 NA 或更改为 XX-XX-XX,这对我的目的来说并不重要。

感谢任何帮助。

【问题讨论】:

    标签: r date


    【解决方案1】:

    你可以试试lubridate。只要您有一组可能的格式:

    library(lubridate)
    parse_date_time(df$Date,c('dmy','y','my'))
    #[1] "2017-07-14 UTC" "2011-09-10 UTC" "2009-07-29 UTC" "2016-01-01 UTC" "2018-12-01 UTC" NA    
    

    【讨论】:

    • 我尝试了你的函数,它返回了一个很好的日期列表,但是如何将这些新日期应用于我的数据框?
    • @KakSchoen 您可以将其分配给相应的列:df$Date <- parse_date_time(df$Date,c('dmy','y','my'))
    【解决方案2】:

    您可以在此处使用anytime::anydate。但是,您可能需要添加一些它不会自动识别的格式。例如,不添加任何格式

    anytime::anydate(df$Date)
    #[1] NA           "2011-09-10" "2009-07-29" "2016-01-01" NA           NA
    

    让我们添加缺少的格式

    anytime::addFormats(c('%b-%Y', '%d-%m-%Y', "%Y"))
    anytime::anydate(df$Date)
    #[1] "2017-07-14" "2011-09-10" "2009-07-29" "2016-01-01" "2018-12-01" NA
    

    数据

    df <- structure(list(Group = 1:6, Date = structure(c(2L, 1L, 4L, 3L, 
    5L, NA), .Label = c("10-sep-2011", "14-7-2017", "2016", "29-jul-2009", 
    "dec-2018"), class = "factor")), class = "data.frame", row.names = c(NA, -6L))
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-01-11
      • 2018-06-08
      • 2022-11-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-02-14
      • 1970-01-01
      相关资源
      最近更新 更多