我想使用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
有人对此有任何想法吗?
答案 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