从以下格式解析日期:"%B%d,%Y"格式:"%Y-%m-%d"在R

时间:2016-04-01 11:00:46

标签: r date lubridate

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

3 个答案:

答案 0 :(得分:3)

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

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

答案 1 :(得分:2)

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

答案 2 :(得分: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)