library("tidyverse")
## ── Attaching core tidyverse packages ──────────────────────── tidyverse 2.0.0 ──
## ✔ dplyr     1.1.4     ✔ readr     2.1.5
## ✔ forcats   1.0.0     ✔ stringr   1.5.1
## ✔ ggplot2   3.5.1     ✔ tibble    3.2.1
## ✔ lubridate 1.9.3     ✔ tidyr     1.3.1
## ✔ purrr     1.0.2     
## ── Conflicts ────────────────────────────────────────── tidyverse_conflicts() ──
## ✖ dplyr::filter() masks stats::filter()
## ✖ dplyr::lag()    masks stats::lag()
## ℹ Use the conflicted package (<http://conflicted.r-lib.org/>) to force all conflicts to become errors
library("tinytex")
library("dplyr")
stock_df <- read.csv('stock_df.csv')
str(stock_df)
## 'data.frame':    5 obs. of  106 variables:
##  $ company     : chr  "Amazon" "Apple" "Facebook" "Google" ...
##  $ X2019_week1 : num  1847.8 73.4 205.2 1337 157.7
##  $ X2019_week2 : num  1640.6 38.1 143.8 1057.2 102.8
##  $ X2019_week3 : num  1696.2 39.2 150 1098.3 107.7
##  $ X2019_week4 : num  1670.6 39.4 149 1091 107.2
##  $ X2019_week5 : num  1626.2 41.6 165.7 1110.8 102.8
##  $ X2019_week6 : num  1588.2 42.6 167.3 1095.1 105.7
##  $ X2019_week7 : num  1607.9 42.6 162.5 1113.7 108.2
##  $ X2019_week8 : num  1631.6 43.2 161.9 1110.4 111
##  $ X2019_week9 : num  1671.7 43.7 162.3 1141 112.5
##  $ X2019_week10: num  1620.8 43.2 169.6 1142.3 110.5
##  $ X2019_week11: num  1712.4 46.5 166 1184.5 115.9
##  $ X2019_week12: num  1764.8 47.8 164.3 1205.5 117.1
##  $ X2019_week13: num  1780.8 47.5 166.7 1173.3 117.9
##  $ X2019_week14: num  1837.3 49.2 175.7 1207.2 119.9
##  $ X2019_week15: num  1843.1 49.7 179.1 1217.9 120.9
##  $ X2019_week16: num  1862 51 178 1236 123
##  $ X2019_week17: num  1950.6 51.1 191.5 1272.2 129.9
##  $ X2019_week18: num  1962.5 52.9 195.5 1185.4 128.9
##  $ X2019_week19: num  1890 49.3 188.3 1164.3 127.1
##  $ X2019_week20: num  1869 47.2 185.3 1162.3 128.1
##  $ X2019_week21: num  1823.3 44.7 181.1 1133.5 126.2
##  $ X2019_week22: num  1775.1 43.8 177.5 1103.6 123.7
##  $ X2019_week23: num  1804 47.5 173.4 1066 131.4
##  $ X2019_week24: num  1869.7 48.2 181.3 1085.3 132.4
##  $ X2019_week25: num  1911.3 49.7 191.1 1121.9 137
##  $ X2019_week26: num  1893.6 49.5 193 1080.9 134
##  $ X2019_week27: num  1942.9 51.1 196.4 1131.6 137.1
##  $ X2019_week28: num  2011 50.8 204.9 1144.9 138.9
##  $ X2019_week29: num  1964.5 50.6 198.4 1130.1 136.6
##  $ X2019_week30: num  1943.1 51.9 199.8 1250.4 141.3
##  $ X2019_week31: num  1823 51 189 1194 137
##  $ X2019_week32: num  1807.6 50.2 187.9 1188 137.7
##  $ X2019_week33: num  1792.6 51.6 183.7 1177.6 136.1
##  $ X2019_week34: num  1749.6 50.7 177.8 1151.3 133.4
##  $ X2019_week35: num  1776.3 52.2 185.7 1188.1 137.9
##  $ X2019_week36: num  1833.5 53.3 187.5 1204.9 139.1
##  $ X2019_week37: num  1839.3 54.7 187.2 1239.6 137.3
##  $ X2019_week38: num  1794.2 54.4 189.9 1229.9 139.4
##  $ X2019_week39: num  1725.4 54.7 177.1 1225.1 137.7
##  $ X2019_week40: num  1739.7 56.8 180.4 1209 138.1
##  $ X2019_week41: num  1731.9 59.1 184.2 1215.4 139.7
##  $ X2019_week42: num  1757.5 59.1 185.9 1245.5 137.4
##  $ X2019_week43: num  1761.3 61.6 187.9 1265.1 140.7
##  $ X2019_week44: num  1791 64 194 1274 144
##  $ X2019_week45: num  1786 65 191 1311 146
##  $ X2019_week46: num  1739.5 66.4 195.1 1334.9 150
##  $ X2019_week47: num  1745.7 65.4 198.8 1295.3 149.6
##  $ X2019_week48: num  1800.8 66.8 201.6 1305 151.4
##  $ X2019_week49: num  1751.6 67.7 201.1 1340.6 151.8
##  $ X2019_week50: num  1760.9 68.8 194.1 1347.8 154.5
##  $ X2019_week51: num  1786.5 69.9 206.3 1349.6 157.4
##  $ X2019_week52: num  1869.8 72.4 208.1 1351.9 159
##  $ X2020_week1 : num  1875 74.4 208.7 1360.7 158.6
##  $ X2020_week2 : num  1883.2 77.6 218.1 1429.7 161.3
##  $ X2020_week3 : num  1864.7 79.7 222.1 1480.4 167.1
##  $ X2020_week4 : num  1861.6 79.6 217.9 1466.7 165
##  $ X2020_week5 : num  2008.7 77.4 201.9 1434.2 170.2
##  $ X2020_week6 : num  2079 80 212 1479 184
##  $ X2020_week7 : num  2134.9 81.2 214.2 1520.7 185.4
##  $ X2020_week8 : num  2096 78.3 210.2 1485.1 178.6
##  $ X2020_week9 : num  1883.8 68.3 192.5 1339.3 162
##  $ X2020_week10: num  1901.1 72.3 181.1 1298.4 161.6
##  $ X2020_week11: num  1785 69.5 170.3 1219.7 158.8
##  $ X2020_week12: num  1846.1 57.3 149.7 1072.3 137.4
##  $ X2020_week13: num  1900.1 61.9 156.8 1110.7 149.7
##  $ X2020_week14: num  1906.6 60.4 154.2 1097.9 153.8
##  $ X2020_week15: num  2043 67 175 1211 165
##  $ X2020_week16: num  2375 70.7 179.2 1283.2 178.6
##  $ X2020_week17: num  2410.2 70.7 190.1 1279.3 174.6
##  $ X2020_week18: num  2286 72.3 202.3 1320.6 174.6
##  $ X2020_week19: num  2379.6 77.5 212.4 1388.4 184.7
##  $ X2020_week20: num  2409.8 76.9 210.9 1373.2 183.2
##  $ X2020_week21: num  2436.9 79.7 234.9 1410.4 183.5
##  $ X2020_week22: num  2442.4 79.5 225.1 1428.9 183.2
##  $ X2020_week23: num  2483 82.9 230.8 1438.4 187.2
##  $ X2020_week24: num  2545 84.7 228.6 1413.2 187.7
##  $ X2020_week25: num  2675 87.4 238.8 1431.7 195.1
##  $ X2020_week26: num  2692.9 88.4 216.1 1359.9 196.3
##  $ X2020_week27: num  2890 91 233 1465 206
##  $ X2020_week28: num  3200 95.9 245.1 1541.7 213.7
##  $ X2020_week29: num  2962 96.3 242 1515.6 202.9
##  $ X2020_week30: num  3008.9 92.6 230.7 1511.9 201.3
##  $ X2020_week31: num  3165 106 254 1483 205
##  $ X2020_week32: num  3167 111 268 1494 212
##  $ X2020_week33: num  3148 115 261 1508 209
##  $ X2020_week34: num  3285 124 267 1580 213
##  $ X2020_week35: num  3402 125 294 1644 229
##  $ X2020_week36: num  3295 121 283 1591 214
##  $ X2020_week37: num  3116 112 267 1521 204
##  $ X2020_week38: num  2955 107 253 1460 200
##  $ X2020_week39: num  3095 112 255 1445 208
##  $ X2020_week40: num  3125 113 260 1458 206
##  $ X2020_week41: num  3287 117 264 1515 216
##  $ X2020_week42: num  3273 119 266 1573 220
##  $ X2020_week43: num  3204 115 285 1641 216
##  $ X2020_week44: num  3036 109 263 1621 202
##  $ X2020_week45: num  3311 119 293 1762 224
##  $ X2020_week46: num  3129 119 277 1777 217
##   [list output truncated]
stock_df_long <- stock_df %>%
  pivot_longer(cols = !company,
               names_to = c("year", "week"),
               names_sep = "_week",
               names_transform = list(year = as.integer, week = as.integer),
               values_to = "price")
## Warning in f(names[[col]]): NAs introduced by coercion
head(stock_df_long)
## # A tibble: 6 × 4
##   company  year  week price
##   <chr>   <int> <int> <dbl>
## 1 Amazon     NA     1 1848.
## 2 Amazon     NA     2 1641.
## 3 Amazon     NA     3 1696.
## 4 Amazon     NA     4 1671.
## 5 Amazon     NA     5 1626.
## 6 Amazon     NA     6 1588.