У меня есть данные за 30 лет, которые я хочу использовать для ежедневных графиков.
Это в основном график, который мне нужен, но я не думаю, что я работаю с данными наиболее эффективным способом. Как я только что узнал из предыдущего вопроса , у меня возникли некоторые проблемы с форматом данных, и данные от 29 февраля являются сложными.
В настоящее время я работаю с тремя столбцами дат (date
, ddmm
, daymo
), которые имеют немного другое форматирование.
> str(SFdischg)
'data.frame': 11932 obs. of 5 variables:
$ date : Factor w/ 11932 levels "1/01/1985","1/01/1986",..: 97 4409 8697 9677 10069 10461 10853 11245 11637 489 ...
$ ddmm : Factor w/ 366 levels "01-Apr","01-Aug",..: 1 13 25 37 49 61 73 85 97 109 ...
$ year : int 1984 1984 1984 1984 1984 1984 1984 1984 1984 1984 ...
$ cfs : int 1500 1430 1500 1850 1810 1830 1850 1880 1970 1980 ...
$ daymo: Date, format: "2018-04-01" "2018-04-02" "2018-04-03" ...
Вы можете видеть, что daymo
это все один и тот же год. Я создал его, используя SFdischg$ddmm[is.na(as.Date(SFdischg$ddmm, format="%d-%b"))]
, но это означает, что есть NA, когда есть данные за предыдущие годы с 29 февраля. Я могу опустить эти данные, но весь этот шаг кажется немного глупым и громоздким.
Вместо того чтобы прыгать через все эти обручи, чтобы получить график, который я хочу, как я могу использовать date
вместо daymo
для создания долгосрочного среднего и "текущего" графика года? Я действительно хочу использовать только два столбца данных: date
и cfs
.
Вот как я создал сюжет:
SF_pre <- subset(SFdischg, year <2016)
SF_year <- subset(SFdischg, year == 2016)
ggplot(SF_pre, aes(x=daymo, y=cfs)) +
stat_summary(fun.data = "mean_cl_boot", geom = "smooth", colour = "blue", se = TRUE) +
geom_line(data=SF_year, aes(x=daymo, y=cfs), size=1) +
# legend
annotate("text", x=as.Date(dmy("12/2/2018")), y=3850, label = "30 year mean") +
annotate("segment",
x=as.Date(dmy("1/1/2018")), xend = as.Date(dmy("15/1/2018")),
y=3850, yend = 3850,
colour = "blue", size = 1) +
annotate("text", x=as.Date(dmy("26/1/2018")), y=3650, label = "2016") +
annotate("segment",
x=as.Date(dmy("1/1/2018")), xend = as.Date(dmy("15/1/2018")),
y=3650, yend = 3650,
colour = "black", size = 1) +
labs(x="date",y="discharge (cfs)") +
scale_x_date(date_breaks = "1 month",
date_labels = "%b") +
theme(plot.title = element_text(color="#666666", face="bold", size=24, hjust=0)) +
theme(axis.title = element_text(color="#666666", face="bold", size=16)) +
theme_bw()
отредактировано для добавления данных
year cfs daymo date ddmm
1 1984 1500 2018-04-01 1/04/1984 01-Apr
2 1984 1430 2018-04-02 2/04/1984 02-Apr
3 1984 1500 2018-04-03 3/04/1984 03-Apr
4 1984 1850 2018-04-04 4/04/1984 04-Apr
5 1984 1810 2018-04-05 5/04/1984 05-Apr
6 1984 1830 2018-04-06 6/04/1984 06-Apr