Home > Mobile >  Plotting/Mutating Data on R
Plotting/Mutating Data on R

Time:03-08

I've trying to plot data that has been mutated into quarterly growth rates from nominal levels.

i.e the original dataset was

Date    GDP Level
2010Q1  457
2010Q2  487
2010Q3  538
2010Q4  589
2011Q1  627
2011Q2  672.2
2011Q3  716.4
2011Q4  760.6
2012Q1  804.8
2012Q2  849
2012Q3  893.2
2012Q4  937.4

Which was in an excel file which I have imported using

dataset <- read_excel("xx")

Then, I have done the below in order to mutate it to quarter on quarter growth ("QoQ Growth):

dataset %>%
mutate(QoQ Growth= (GDP Level) / lag(GDP Level, n=1) - 1)

I would like to now plot this % growth across time, however I'm not too sure how what the geom_line code is for a mutated variable, any help would be really truly appreciated! I'm quite new to R and really trying to learn, thanks!

CodePudding user response:

Something like this?

library(tidyverse)

df %>%
  mutate(QoQGrowth = (GDPLevel) / lag(GDPLevel, n=1) - 1) %>%
  ggplot(aes(factor(Date), QoQGrowth, group=1))  
  geom_line()

Output

enter image description here

Data

df <- structure(list(Date = c("2010Q1", "2010Q2", "2010Q3", "2010Q4", 
"2011Q1", "2011Q2", "2011Q3", "2011Q4", "2012Q1", "2012Q2", "2012Q3", 
"2012Q4"), GDPLevel = c(457, 487, 538, 589, 627, 672.2, 716.4, 
760.6, 804.8, 849, 893.2, 937.4)), class = "data.frame", row.names = c(NA, 
-12L))

CodePudding user response:

Package zoo defines a S3 class "yearqtr" and has a function to handle quarterly dates, as.yearqtr. Combined with ggplot2's scale_x_date, the formating of quarterly axis labels becomes easier.

dataset <- read.table(text = "
Date    'GDP Level'
2010Q1  457
2010Q2  487
2010Q3  538
2010Q4  589
2011Q1  627
2011Q2  672.2
2011Q3  716.4
2011Q4  760.6
2012Q1  804.8
2012Q2  849
2012Q3  893.2
2012Q4  937.4
", header = TRUE, check.names = FALSE)

suppressPackageStartupMessages(library(dplyr))
suppressPackageStartupMessages(library(zoo))
library(ggplot2)

dataset %>%
  mutate(Date = as.yearqtr(Date, format= "%Y Q%q"),
         Date = as.Date(Date)) %>% 
  mutate(`QoQ Growth` = `GDP Level` / lag(`GDP Level`, n = 1) - 1) %>% 
  ggplot(aes(Date, `QoQ Growth`))  
  geom_line()  
  scale_x_date(date_breaks = "3 months", labels = as.yearqtr)  
  theme(axis.text.x = element_text(angle = 45, vjust = 1, hjust = 1))
#> Warning: Removed 1 row(s) containing missing values (geom_path).

Created on 2022-03-08 by the screenshot

  •  Tags:  
  • r
  • Related