.Rmd.stock_df <- read_csv("stock_df.csv", show_col_types = FALSE)
# Show the data (like the PDF example)
stock_df
spec()spec(stock_df)
## cols(
## company = col_character(),
## `2019_week1` = col_double(),
## `2019_week2` = col_double(),
## `2019_week3` = col_double(),
## `2019_week4` = col_double(),
## `2019_week5` = col_double(),
## `2019_week6` = col_double(),
## `2019_week7` = col_double(),
## `2019_week8` = col_double(),
## `2019_week9` = col_double(),
## `2019_week10` = col_double(),
## `2019_week11` = col_double(),
## `2019_week12` = col_double(),
## `2019_week13` = col_double(),
## `2019_week14` = col_double(),
## `2019_week15` = col_double(),
## `2019_week16` = col_double(),
## `2019_week17` = col_double(),
## `2019_week18` = col_double(),
## `2019_week19` = col_double(),
## `2019_week20` = col_double(),
## `2019_week21` = col_double(),
## `2019_week22` = col_double(),
## `2019_week23` = col_double(),
## `2019_week24` = col_double(),
## `2019_week25` = col_double(),
## `2019_week26` = col_double(),
## `2019_week27` = col_double(),
## `2019_week28` = col_double(),
## `2019_week29` = col_double(),
## `2019_week30` = col_double(),
## `2019_week31` = col_double(),
## `2019_week32` = col_double(),
## `2019_week33` = col_double(),
## `2019_week34` = col_double(),
## `2019_week35` = col_double(),
## `2019_week36` = col_double(),
## `2019_week37` = col_double(),
## `2019_week38` = col_double(),
## `2019_week39` = col_double(),
## `2019_week40` = col_double(),
## `2019_week41` = col_double(),
## `2019_week42` = col_double(),
## `2019_week43` = col_double(),
## `2019_week44` = col_double(),
## `2019_week45` = col_double(),
## `2019_week46` = col_double(),
## `2019_week47` = col_double(),
## `2019_week48` = col_double(),
## `2019_week49` = col_double(),
## `2019_week50` = col_double(),
## `2019_week51` = col_double(),
## `2019_week52` = col_double(),
## `2020_week1` = col_double(),
## `2020_week2` = col_double(),
## `2020_week3` = col_double(),
## `2020_week4` = col_double(),
## `2020_week5` = col_double(),
## `2020_week6` = col_double(),
## `2020_week7` = col_double(),
## `2020_week8` = col_double(),
## `2020_week9` = col_double(),
## `2020_week10` = col_double(),
## `2020_week11` = col_double(),
## `2020_week12` = col_double(),
## `2020_week13` = col_double(),
## `2020_week14` = col_double(),
## `2020_week15` = col_double(),
## `2020_week16` = col_double(),
## `2020_week17` = col_double(),
## `2020_week18` = col_double(),
## `2020_week19` = col_double(),
## `2020_week20` = col_double(),
## `2020_week21` = col_double(),
## `2020_week22` = col_double(),
## `2020_week23` = col_double(),
## `2020_week24` = col_double(),
## `2020_week25` = col_double(),
## `2020_week26` = col_double(),
## `2020_week27` = col_double(),
## `2020_week28` = col_double(),
## `2020_week29` = col_double(),
## `2020_week30` = col_double(),
## `2020_week31` = col_double(),
## `2020_week32` = col_double(),
## `2020_week33` = col_double(),
## `2020_week34` = col_double(),
## `2020_week35` = col_double(),
## `2020_week36` = col_double(),
## `2020_week37` = col_double(),
## `2020_week38` = col_double(),
## `2020_week39` = col_double(),
## `2020_week40` = col_double(),
## `2020_week41` = col_double(),
## `2020_week42` = col_double(),
## `2020_week43` = col_double(),
## `2020_week44` = col_double(),
## `2020_week45` = col_double(),
## `2020_week46` = col_double(),
## `2020_week47` = col_double(),
## `2020_week48` = col_double(),
## `2020_week49` = col_double(),
## `2020_week50` = col_double(),
## `2020_week51` = col_double(),
## `2020_week52` = col_double(),
## `2020_week53` = col_double()
## )
The columns are like: 2019_week1,
2019_week2, …
We reshape to: company, year,
week, price.
IMPORTANT: In R strings, regex backslashes must be escaped.
That’s why you’ll see\\dbelow.
stock_df_long <- stock_df %>%
pivot_longer(
cols = -company,
names_to = c("year", "week"),
names_pattern = "(\\d{4})_week(\\d+)",
values_to = "price"
) %>%
mutate(
year = as.integer(year),
week = as.integer(week)
) %>%
arrange(company, year, week)
stock_df_long
# Should be 5 companies x 105 weeks = 525 rows, and 4 columns
dim(stock_df_long)
## [1] 525 4
# First 10 rows
head(stock_df_long, 10)
stock_2019 <- stock_df_long %>% filter(year == 2019)
ggplot(stock_2019, aes(x = week, y = price, color = company)) +
geom_line(linewidth = 1) +
labs(
title = "Weekly Closing Prices (2019)",
x = "Week",
y = "Closing price"
) +
theme_minimal()