Построение нескольких графиков временных рядов с использованием медианных данных в R

Я только начинаю изучать R, так что это может быть излишним, поэтому прошу прощения. Я хочу сделать этот прикрепленный график Excel в R. Мои данные включают ежедневные показания уровня воды для водохранилища с 1951 по 2016 год. Мне нужны данные, разбитые на три серии (с 1951 по 2013 год, с 2014 по 2015 год и 2016 год). Я хотел бы построить средние значения для этих рядов за календарный день. И я хотел бы удалить 29 февраля из медианных значений. Вот ссылка на мои данные:https://docs.google.com/spreadsheets/d/1u1Whfp6VHXkZgrC0sVn_mT9XiVxszMhqlAszjZXzM1E/edit?usp=sharing

Вот что у меня есть до сих пор:

LL <- read.csv("BSLL.csv")
str(LL)
LLpre <- filter(LL, year > "1952" & year <"2014") 
headtail(LLpre, n=3)
medianLLpre = ddply(LLpre, .(month, day), summarise, level = median(level),   na.rm = FALSE)
LLpost <- filter(LL, year > "2013" & year < "2016")
headtail(LLpost, n=3)
medianLLpost = ddply(LLpost, .(month, day), summarise, level = median(level), na.rm = FALSE)
LL2016 <- filter(LL, year == "2016")
headtail(LL2016, n=3)
medianLL2016 = ddply(LL2016, .(month, day), summarise, level = median(level), na.rm = FALSE)    

График Excel


person Mojorig    schedule 24.01.2017    source источник


Ответы (1)


library(data.table)
Data <- fread("BSLL - BSLL.csv")

Создайте категории временных интервалов 1 = с 1951 по 2013 год, 2 = с 2014 по 2015 год и 3 = 2016 год.

Data[,Categories:=ifelse(as.numeric(year)<2014,1,
                         ifelse(as.numeric(year)<2016,2,3))]

Создать временные данные без 29 февраля

Temp.Data <- Data[!month==2][!day==29]

Вычислите медиану по категориям и графику.

Medians <- Temp.Data[,median(as.numeric(level)),by=.(month,Categories)]
plot(x=Medians[,month], y=Medians[,V1],type="n", xlab="", ylab="", 
     xaxt="n", yaxt="n", bty="l")
axis(2, tick=TRUE, labels=FALSE)
axis(2, tick=FALSE, labels=TRUE, line=-0.5)
axis(1, tick=TRUE, labels=FALSE)
axis(1, tick=FALSE, labels=TRUE, line=-0.5)
lines(x=Medians[Categories==1][,month],
      y=Medians[Categories==1][,V1],type="l",lwd=1,col="red")
lines(x=Medians[Categories==2][,month],
      y=Medians[Categories==2][,V1],type="l",lwd=1,col="green")
lines(x=Medians[Categories==3][,month],
      y=Medians[Categories==3][,V1],type="l",lwd=1,col="blue")
legend('topright','groups',
       legend=c("1951 to 2013","2014 to 2015","2016"), bty="n",lty=c(1,1),
       col=c("red","green","blue"))

Как это? Вы можете возиться с деталями сюжета (размеры, позиции, цвета, метки и т. д.) самостоятельно.

P.S. В будущем не рекомендуется публиковать полный набор данных. Участникам здесь просто нужен пример ваших данных для работы и тестирования.

person JustGettinStarted    schedule 24.01.2017
comment
Спасибо за совет по обмену данными. - person Mojorig; 24.01.2017
comment
Вы пробовали сценарий в моем ответе? Они дали вам то, что вам нужно? если да, то, пожалуйста, нажмите на галочку, чтобы этот вопрос можно было считать закрытым. - person JustGettinStarted; 24.01.2017
comment
Я хотел разработать линейные графики вместо гистограмм за календарный год. Я прикрепил график Excel, чтобы лучше объяснить, что я пытаюсь сделать. - person Mojorig; 24.01.2017
comment
а, хорошо, так что вы хотите, чтобы месячные медианы за годы классифицировались как указано. Нет проблем, я свяжусь с вами через несколько - person JustGettinStarted; 24.01.2017
comment
Откорректированный скрипт по запросу. Если это то, что вам нужно, нажмите галочку рядом с ответом, чтобы этот вопрос можно было считать закрытым. - person JustGettinStarted; 25.01.2017