将年月格式转换为 POSIXct

pha*_*ser 1 r date

我有一些年月形式的数据,我想将其格式化以在ggplot.

date <- c("2016-03", "2016-04", "2016-05", "2016-06", "2016-07", "2016-08", 
"2016-09", "2016-10", "2016-11", "2016-12")
Run Code Online (Sandbox Code Playgroud)

我正在使用parsedate::parse_date,但自从更新 R 后它不再起作用。

我看过

R 中的日期格式(年月)

as.yearmon工作正常,但它没有格式化为我需要的 POSIXct ggplot。其他格式(例如as.POSIXct和 )strptime会给出 NA 或错误。

注意:我不介意是否将每月的第一天添加到“年-月”格式中。

Dir*_*tel 5

这是一个常见问题解答:日期由日、月和年组成。你缺少一个部分。因此,通过添加一天(例如“-01”),您可以强加缺失的字符串结构并进行解析。或者你可以使用更宽容的解析器:

R> library(anytime)
R> anydate("2017-06")
[1] "2017-06-01"
R> 
Run Code Online (Sandbox Code Playgroud)

这也适用于您的数据:

R> date
 [1] "2016-03" "2016-04" "2016-05" "2016-06"
 [5] "2016-07" "2016-08" "2016-09" "2016-10"
 [9] "2016-11" "2016-12"
R> anydate(date)
 [1] "2016-03-01" "2016-04-01" "2016-05-01"
 [4] "2016-06-01" "2016-07-01" "2016-08-01"
 [7] "2016-09-01" "2016-10-01" "2016-11-01"
[10] "2016-12-01"
R> 
Run Code Online (Sandbox Code Playgroud)

最后,您对POSIXct类型的请求仍然是短一小时、一分钟和一秒。但同样的原则:

R> anytime(date)
 [1] "2016-03-01 CST" "2016-04-01 CDT"
 [3] "2016-05-01 CDT" "2016-06-01 CDT"
 [5] "2016-07-01 CDT" "2016-08-01 CDT"
 [7] "2016-09-01 CDT" "2016-10-01 CDT"
 [9] "2016-11-01 CDT" "2016-12-01 CST"
R> 
Run Code Online (Sandbox Code Playgroud)

这两个函数分别返回属性DatePOSIXct类型。