我需要創建一個圖表,顯示兩組的最早日期和最晚日期之間的范圍。有不同的年份,但我只對定義為月日(即 2 月 4 日)的日期感興趣,而不管年份。在將月日定義為儒略日時,我能夠做到這一點,但我想以月日格式(即 2 月 4 日)來做到這一點。
這是我在朱利安日期作業時獲得的代碼和輸出:
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似乎是字符格式,我找不到更改日期的方法。這樣一來,情節就錯了:

任何提示將不勝感激。
uj5u.com熱心網友回復:
解決此問題的一種方法可能是將doy變數設為任意年份(例如 2022 年)的日期。在這里,第一天將是 2021 年 12 月 31 日之后的一天,即 2022 年 1 月 1 日。
(2022 年不是閏年,因此閏年 2 月 28 日之后的日期將提前一天表示。即 2 月 29 日發生時是一年中的第 60 天,但在大多數年份,如 2022 年, 3 月 1 日是第 60 天,所以它會顯示在那里。根據背景關系,您可能會對此進行調整。)
data.2 %>%
mutate(across(contains("doy"), ~as.Date("2021-12-31") .x))
這是要求 dplyr 將相同的函式應用于名稱包含強“doy”的任何列的快捷方式。我們可以等效地使用:
data.2 %>%
mutate(earliest.doy = as.Date("2021-12-31") earliest.doy))
mutate(latest.doy = as.Date("2021-12-31") earliers.doy))
結果
# A tibble: 2 × 3
trt earliest.doy latest.doy
<chr> <date> <date>
1 A 2022-09-03 2022-10-28
2 B 2022-08-25 2022-10-16
那么您可以將其輸入到您現有的代碼中:
... %>%
ggplot()
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")

轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/487995.html
