我需要创建一个图,显示两组的最早和最晚日期之间的范围。有不同的年份,但我只对定义为月-日的日期感兴趣(即Feb-04),而不考虑年份。当将月-日定义为儒略日时,我可以做到这一点,但我想使用月-日格式(即Feb-04)。
这是我在Julian日期中工作时获得的代码和输出:
library(dplyr)
data.1 <-read.csv(text = "
trt,full_date
A,10/06/2020
A,09/19/2017
A,10/28/2014
A,09/02/2016
A,09/19/2017
A,09/26/2017
B,08/24/2020
B,09/24/2020
B,10/16/2018
B,09/16/2018
B,09/15/2016
B,09/09/2018
")
#day of year option
data.2 <- data.1 %>%
mutate(full_date = as.Date(full_date, format("%m/%d/%Y")),
full_date.doy = as.numeric(strftime(full_date, format = "%j"))) %>%
group_by(trt) %>%
summarise(earliest.doy = min(full_date.doy),
latest.doy = max(full_date.doy))
ggplot(data.2) +
geom_segment( aes(x=trt, xend=trt, y=earliest.doy, yend=latest.doy), color="grey") +
geom_point( aes(x=trt, y=earliest.doy), color=rgb(0.2,0.7,0.1,0.5), size=3 ) +
geom_point( aes(x=trt, y=latest.doy), color=rgb(0.7,0.2,0.1,0.5), size=3 ) +
coord_flip() +
ylab("Day of the year")
输出:
我想要的是这个(x轴上的日期是近似的:
我遇到的第一个问题是最早和最晚日期的计算。对于trt="A"
,最早和最晚日期是错误的。
问题是date_mm.dd
似乎是字符格式,我找不到更改日期的方法。这样,情节就错了:
任何提示都将不胜感激。
1条答案
按热度按时间hxzsmxv21#
解决这个问题的一种方法是将您的
doy
变量转换为任意年份的日期,如2022年。在这里,第一天将是2021-12-31之后的一天,即2022年1月1日。(2022不是闰年,所以在闰年2月28日之后的日期将提前一天表示。即2月29日,当它发生时,是一年的第60天,但在大多数年份,如2022年,3月1日是第60天,所以它会显示在那里。根据上下文,您可能会对此进行调整。
这是让dplyr将相同的函数应用于任何名称包含字符串“doy”的列的快捷方式。我们可以等效地用途:
结果
然后你可以把它输入到你现有的代码中: