【问题标题】:Parse a date from a format like: "%B %d, %Y" to a format: "%Y-%m-%d" in R将日期从格式如:“%B %d, %Y”解析为格式:R 中的“%Y-%m-%d”
【发布时间】:2016-04-01 11:00:46
【问题描述】:

我想在 R 中转换一个日期字符串向量,如下所示:

[1] "March 21, 2016"    "March 9, 2016"     "March 1, 2016"     "February 29, 2016" "January 26, 2016"  "December 15, 2015" "December 14, 2015"
 [8] "November 9, 2015"  "October 13, 2015"  "August 26, 2015"   "August 10, 2015"  

到这样的日期向量:

[1]  "2016-03-21" "2016-03-09" 
.....

我已经尝试过使用以下方法解析字符串,但没有成功:

library(lubridate)    
format(mdy(dates),"%Y-%m-%d")

并使用:

as.Date(dates, "%Y-%m-%d")

在这两种情况下,结果都是一个 NA 字符串。 怎么了?

【问题讨论】:

  • 这可能取决于您的语言环境。 Sys.getlocale() 的输出是什么?
  • "LC_COLLATE=Italian_Italy.1252;LC_CTYPE=Italian_Italy.1252;LC_MONETARY=Italian_Italy.1252;LC_NUMERIC=C;LC_TIME=Italian_Italy.1252"
  • 这就是问题所在。我做了一个回答,你看看。

标签: r date lubridate


【解决方案1】:

您没有使用正确的Date 值。试试这个:

as.Date(dates, "%B %d, %Y")

【讨论】:

    【解决方案2】:

    问题是您的locale 期望月份名称是意大利语。由于它们在您的对象中是英文的,因此不会解析日期。例如,这应该对你有用(幸运的是我也是意大利人):

    dates <- "Marzo, 21 2016"
    library(lubridate)    
    format(mdy(dates),"%Y-%m-%d")
    #[1] "2016-03-21"
    

    要解析您的日期,您必须更改语言环境:

    #register the old locale to set it back
    OL <- Sys.getlocale("LC_TIME")
    #set the new locale
    Sys.setlocale("LC_TIME","C")
    dates <- "March, 21 2016"
    format(mdy(dates),"%Y-%m-%d")
    #[1] "2016-03-21"
    #Change the locale back to the old value
    Sys.setlocale("LC_TIME", OL)
    

    【讨论】:

      【解决方案3】:
      d<-"March 21, 2016"
      parse_date_time(d, orders="%B %d, %Y")
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2015-10-26
        • 1970-01-01
        • 2023-03-08
        • 2021-12-22
        • 2012-07-21
        • 2013-02-10
        • 1970-01-01
        • 2021-03-09
        相关资源
        最近更新 更多