Построить временные ряды с годами в разных столбцах - PullRequest
0 голосов
/ 07 января 2020

У меня есть следующий фрейм данных dt(head,6):

dt(head, 6)

Мне нужно создать график, в котором у меня есть годы (2015, 2016, 2017, 2018, 2019 ) на оси х, различные столбцы (W15, W16, W17, W18, W19 - каждый относится к одному году) на оси Y. Все они должны быть сгруппированы по столбцу TEAM.

Я пытался использовать ggplot2 безрезультатно.

Ответы [ 2 ]

3 голосов
/ 07 января 2020

Вам необходимо преобразовать данные из широкого в длинный, а затем использовать ggplot. Смотрите ниже;

library(tidyverse)

dt %>% 
  pivot_longer(., -Team, values_to = "W", names_to = "Year") %>% 
  mutate(Year = as.integer(gsub("W", "20", Year))) %>% 
  ggplot(., aes(x=Year, y=W, group=Team)) +
  geom_line(aes(color=Team))

Данные:

dt <- structure(list(Team = c("AC", "AF", "AK", "AL", "AA&M", "Alst", "Alb"), 
                     W15 = c(7L, 12L, 20L, 18L, 8L, 17L, 24L), 
                     W16 = c(9L, 12L, 25L, 18L, 10L, 12L, 23L), 
                     W17 = c(13L, 12L, 27L, 19L, 2L, 8L, 21L), 
                     W18 = c(16L, 12L, 14L, 20L, 3L, 8L, 22L), 
                     W19 = c(27L, 14L, 17L, 18L, 5L, 12L, 12L)), 
                class = "data.frame", row.names = c(NA, -7L))
#   Team W15 W16 W17 W18 W19
# 1   AC   7   9  13  16  27
# 2   AF  12  12  12  12  14
# 3   AK  20  25  27  14  17
# 4   AL  18  18  19  20  18
# 5 AA&M   8  10   2   3   5
# 6 Alst  17  12   8   8  12
# 7  Alb  24  23  21  22  12
0 голосов
/ 08 января 2020

Создайте объект зоопарка z из t(dt[-1]) и время из числовой c части имен). Используйте dt $ TEAM в качестве имен столбцов. Наконец, используйте autoplot.zoo, чтобы построить его, используя ggplot2. Удалите facet=NULL, если вы предпочитаете отдельную панель для каждой серии.

library(ggplot2)
library(zoo)

z <- zoo(t(dt[-1]), as.numeric(sub("W", "", names(dt)[-1])))
names(z) <- dt$TEAM

autoplot(z, facet = NULL) + scale_x_continuous(breaks = time(z))

Примечание

Предположим, что эти входные данные:

set.seed(123)
dt <- data.frame(TEAM = letters[1:5], W15 = rnorm(5), W16 = rnorm(5), W17 = rnorm(5))
...