将日期从格式如:“%B %d, %Y”解析为格式:R 中的“%Y-%m-%d”

Parse a date from a format like: "%B %d, %Y" to a format: "%Y-%m-%d" in R

我想在 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 字符串。 怎么了?

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

as.Date(dates, "%B %d, %Y")
d<-"March 21, 2016"
parse_date_time(d, orders="%B %d, %Y")

问题是您的 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)