Построение графика на основе всех результатов из первой точки данных с использованием ggplot - PullRequest
0 голосов
/ 03 февраля 2020

У меня есть следующий фрейм данных:

hours <- data.frame(Year = rep(c(2013, 2014, 2015, 2016, 2017, 2018, 2019), 4), 
           Subject = rep("Computing", 28), 
           Keystage = rep(c("Total", "KS3", "KS4", "KS5"), each = 7), 
           Hours = c(166, 152.5, 136.9, 125.5, 116.6, 
                     106.7, 102.338, 70.2, 65.3, 58, 56.1, 53.6, 51.8, 51.801, 
                     66.4, 58.7, 51.8, 44.4, 40.1, 35.4, 32.802, 29.4, 28.6, 
                     27.1, 25, 22.9, 19.4, 17.734))

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

enter image description here

Ответы [ 2 ]

2 голосов
/ 03 февраля 2020

Рассчитайте процентное изменение в каждой группе, а затем создайте ggplot, как обычно:

library(ggplot2)
library(dplyr)

hours %>%
  group_by(Keystage) %>%
  mutate(Hours_pct = Hours / first(Hours)) %>%
  ggplot(aes(x = Year, y = Hours_pct, color = Keystage)) +
  geom_line() +
  scale_y_continuous(labels = scales::percent)
1 голос
/ 03 февраля 2020

Это должно работать:

library(dplyr)
library(tidyverse)

hours %>%
  mutate(Tper = (Hours*100)/(max(.$Hours[.$Keystage=="Total"]))) %>%
  mutate(KS3per = (Hours*100)/(max(.$Hours[.$Keystage=="KS3"]))) %>%
  mutate(KS4per = (Hours*100)/(max(.$Hours[.$Keystage=="KS4"]))) %>%
  mutate(KS5per = (Hours*100)/(max(.$Hours[.$Keystage=="KS5"]))) %>%
  mutate(Percentage = ifelse(.$Keystage=="Total", Tper,
                             ifelse(.$Keystage=="KS3", KS3per,
                                    ifelse( .$Keystage=="KS4", KS4per, KS5per)))) %>%
  select(c(Year, Keystage, Percentage)) %>%
  ggplot(., mapping= aes(x=Year, y = Percentage, colour = Keystage)) + 
    geom_path()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...