获取自定义日期格式以进行绘图时出现问题

时间:2019-05-15 02:31:15

标签: r datetime

我想使用ggplot绘制几年内的时间序列,其日期在x轴上的格式为“ MMM YYYY”,并按时间顺序进行排序。

到目前为止,我已经将所需的日期提取到了一个字符变量中,但是当绘制月份/年份时,按字母顺序而不是按时间顺序进行排序-我理解为什么会这样。 因此,我尝试将变量强制为日期(格式为MMM YYYY),并且尝试了所有可能的as.Date格式排列,但均无济于事。我正在使用的代码是...

df <- data.frame(c("16:45 11-Nov-17", "22:30 11-Jul-18", "01:24 30-Dec-18", "12:41 12-Jan-19", "13:13 11-Feb-19", "15:22 05-May-19"))
                 names(df) <- c("TDate")

Data <- mutate(df, Date = parse_date_time(df$TDate, "HM:dmy"),
                   MthY = as.Date(paste0(month(ymd_hms(Date), label = TRUE), " ", year(ymd_hms(Date))), format = "%b %Y"))

该代码不会生成任何错误消息,但是无法呈现月/年(MthY)

-#小标题:-6 x 3  TDate日期MthY
                              
   1 16:45 17-Nov-17 2017-11-11 16:45:00 NA
   2 22:30 2018年7月11日22:30:00 NA
   3 01:24 30-Dec-18 2018-12-30 01:24:00 NA
   4 12:41 19-Jan-19 2019-01-12 12:41:00 NA
   5 13:13 19-Feb-19 2019-02-11 13:13:00 NA
   6 15:22 19-五月19 2019-05-05 15:22:00 NA

有人对此有任何想法吗?

2 个答案:

答案 0 :(得分:1)

如果掌握?strptime中的格式,就可以轻松转换

format(as.POSIXct(df$TDate, format = "%H:%M %d-%b-%y"), "%b %Y")
#[1] "Nov 2017" "Jul 2018" "Dec 2018" "Jan 2019" "Feb 2019" "May 2019"

将其添加到dplyr链中

library(dplyr)

df %>%
  mutate(MthY = format(as.POSIXct(TDate, format = "%H:%M %d-%b-%y"), "%b %Y"))

#            TDate     MthY
#1 16:45 11-Nov-17 Nov 2017
#2 22:30 11-Jul-18 Jul 2018
#3 01:24 30-Dec-18 Dec 2018
#4 12:41 12-Jan-19 Jan 2019
#5 13:13 11-Feb-19 Feb 2019
#6 15:22 05-May-19 May 2019

答案 1 :(得分:1)

如果anytime中尚不存在格式,我们可以使用addFormats并添加格式(getFormats

library(anytime)
library(dplyr)
addFormats("%H:%M %d-%b-%y")
df %>%
    mutate(MthY = format(anytime(TDate), "%b %Y"))
#           TDate     MthY
#1 16:45 11-Nov-17 Nov 2017
#2 22:30 11-Jul-18 Jul 2018
#3 01:24 30-Dec-18 Dec 2018
#4 12:41 12-Jan-19 Jan 2019
#5 13:13 11-Feb-19 Feb 2019
#6 15:22 05-May-19 May 2019