Как получить данные за экстремальные годы на основе определенной переменной из data.frame в R? - PullRequest
0 голосов
/ 08 июля 2020

Я знаю, что plot, созданный с использованием ниже code, будет довольно беспорядочным, потому что данные генерируются с использованием uniform distribution. Я хочу select только 5 лет, когда мы наблюдали самое высокое значение на основе Variable A. Это означает, что значения для Variable X могут не быть высокими, поскольку мы обусловливаем выбор на основе Variable A. Множественные пики в каждом конкретном году следует рассматривать как одно событие. После сортировки первых 5 лет я хотел бы получить plot, как показано ниже.

library(tidyverse)
library(lubridate)

set.seed(1500)

FakeData <- data.frame(Date = seq(as.Date("2001-01-01"), to= as.Date("2010-12-31"), by="day"),
                             A = runif(3652, 10,100),
                            X = runif(3652, 5,500)) %>% 
            mutate(Year = year(Date), JDay = yday(Date))

ggplot(FakeData, aes(JDay, A, col=as.factor(Year)))+
  geom_line()+
  theme_bw() +  labs(col = "Year", x = "Month of the year", y = "Levels (m)")+ 
  theme(axis.text = element_text(size = 14), axis.title = element_text(size = 16, face = "bold"))+
  scale_x_continuous(breaks = c(1,32,60,91,121,152,182,213,244,274,305,335), 
                     labels = c("Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"),
                     limits = c(0,365), expand = c(0, 0))

Результат

, например, на рисунке ниже, Я имею plotting данные почти за 38 лет, однако меня интересуют только 5 лет, когда у нас самое высокое значение Level. поэтому я хочу выбрать только эти пять лет для дальнейшего анализа. введите описание изображения здесь

1 Ответ

1 голос
/ 08 июля 2020

Это то, что вы ищете?

library(tidyverse)
library(lubridate)

Найдите максимальное значение для A за каждый год, отсортируйте в порядке убывания и извлеките первые пять лет для использования в качестве фильтра для полного набора данных для черчения.

top_yrs <- 
  FakeData %>% 
  group_by(Year) %>% 
  summarise(maxA = max(A)) %>% 
  arrange(desc(maxA)) %>% 
  top_n(5)

  
FakeData %>% 
  filter(Year %in% top_yrs$Year) %>% 
  ggplot(aes(JDay, A, col=as.factor(Year)))+
  geom_line()+
  theme_bw() +  labs(col = "Year", x = "Month of the year", y = "Levels (m)")+ 
  theme(axis.text = element_text(size = 14), axis.title = element_text(size = 16, face = "bold"))+
  scale_x_continuous(breaks = c(1,32,60,91,121,152,182,213,244,274,305,335), 
                     labels = c("Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"),
                     limits = c(0,365), expand = c(0, 0))
#> Warning: Removed 1 row(s) containing missing values (geom_path).

Created on 2020-07-08 by the пакет реплекс (v0.3.0)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...