stocks <- tq_get(c("MU", "PANW", "CRWD"),
get = "stock.prices",
from = "2020-01-01")
stocks
## # A tibble: 5,052 × 8
## symbol date open high low close volume adjusted
## <chr> <date> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
## 1 MU 2020-01-02 54.8 55.5 54.5 55.4 20173200 54.0
## 2 MU 2020-01-03 54.2 55.3 54 54.5 16815800 53.2
## 3 MU 2020-01-06 53.8 54.1 53.2 53.6 18768700 52.2
## 4 MU 2020-01-07 55.4 58.4 55.4 58.3 49908200 56.8
## 5 MU 2020-01-08 58.1 58.4 57.1 57.5 29730800 56.1
## 6 MU 2020-01-09 58.3 58.5 56.5 57.3 22376100 55.9
## 7 MU 2020-01-10 57.5 57.5 56.3 56.7 19122800 55.3
## 8 MU 2020-01-13 57.0 57.8 56.9 57.5 16163000 56.0
## 9 MU 2020-01-14 57.8 58.3 56.5 57.5 26454300 56.1
## 10 MU 2020-01-15 57.0 57.1 55.8 56.2 21638600 54.8
## # ℹ 5,042 more rows
stocks %>%
ggplot(aes(x = date, y = adjusted, color = symbol)) +
geom_line()
################################################# # Apply the dyplr verbs you learned in chapter 5 #################################################
stocks %>% filter(adjusted > 24)
## # A tibble: 4,932 × 8
## symbol date open high low close volume adjusted
## <chr> <date> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
## 1 MU 2020-01-02 54.8 55.5 54.5 55.4 20173200 54.0
## 2 MU 2020-01-03 54.2 55.3 54 54.5 16815800 53.2
## 3 MU 2020-01-06 53.8 54.1 53.2 53.6 18768700 52.2
## 4 MU 2020-01-07 55.4 58.4 55.4 58.3 49908200 56.8
## 5 MU 2020-01-08 58.1 58.4 57.1 57.5 29730800 56.1
## 6 MU 2020-01-09 58.3 58.5 56.5 57.3 22376100 55.9
## 7 MU 2020-01-10 57.5 57.5 56.3 56.7 19122800 55.3
## 8 MU 2020-01-13 57.0 57.8 56.9 57.5 16163000 56.0
## 9 MU 2020-01-14 57.8 58.3 56.5 57.5 26454300 56.1
## 10 MU 2020-01-15 57.0 57.1 55.8 56.2 21638600 54.8
## # ℹ 4,922 more rows
stocks %>% filter(symbol == "MU")
## # A tibble: 1,684 × 8
## symbol date open high low close volume adjusted
## <chr> <date> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
## 1 MU 2020-01-02 54.8 55.5 54.5 55.4 20173200 54.0
## 2 MU 2020-01-03 54.2 55.3 54 54.5 16815800 53.2
## 3 MU 2020-01-06 53.8 54.1 53.2 53.6 18768700 52.2
## 4 MU 2020-01-07 55.4 58.4 55.4 58.3 49908200 56.8
## 5 MU 2020-01-08 58.1 58.4 57.1 57.5 29730800 56.1
## 6 MU 2020-01-09 58.3 58.5 56.5 57.3 22376100 55.9
## 7 MU 2020-01-10 57.5 57.5 56.3 56.7 19122800 55.3
## 8 MU 2020-01-13 57.0 57.8 56.9 57.5 16163000 56.0
## 9 MU 2020-01-14 57.8 58.3 56.5 57.5 26454300 56.1
## 10 MU 2020-01-15 57.0 57.1 55.8 56.2 21638600 54.8
## # ℹ 1,674 more rows
stocks %>% filter(adjusted > 100)
## # A tibble: 1,674 × 8
## symbol date open high low close volume adjusted
## <chr> <date> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
## 1 MU 2024-03-21 113. 114. 109. 110. 89554100 109.
## 2 MU 2024-03-22 109. 111. 107. 110. 37281400 109.
## 3 MU 2024-03-25 110. 121. 110. 117. 55766100 116.
## 4 MU 2024-03-26 119 122. 118. 119. 44295100 118.
## 5 MU 2024-03-27 119. 120. 117. 119. 29320700 118.
## 6 MU 2024-03-28 119. 120. 117. 118. 21047800 117.
## 7 MU 2024-04-01 119. 127. 119 124. 44309400 123.
## 8 MU 2024-04-02 123. 124. 121. 123. 25026400 122.
## 9 MU 2024-04-03 122. 128. 121. 128. 40130100 127.
## 10 MU 2024-04-04 130. 131. 124. 124. 36009900 123.
## # ℹ 1,664 more rows
stocks %>% filter(symbol == "PANW" & adjusted > 150)
## # A tibble: 618 × 8
## symbol date open high low close volume adjusted
## <chr> <date> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
## 1 PANW 2023-12-12 150. 154. 150. 153. 9127000 153.
## 2 PANW 2023-12-13 153. 158. 153. 157. 10375600 157.
## 3 PANW 2023-12-14 158. 159 149. 150. 13592000 150.
## 4 PANW 2023-12-15 151. 155. 150. 154. 18221000 154.
## 5 PANW 2023-12-18 152. 155. 152. 154. 6663600 154.
## 6 PANW 2023-12-19 154. 155. 153. 154. 7760000 154.
## 7 PANW 2023-12-20 153. 154 150. 150. 6694400 150.
## 8 PANW 2023-12-26 149. 151. 149. 150. 3117400 150.
## 9 PANW 2024-01-09 144. 150. 143. 150. 7302400 150.
## 10 PANW 2024-01-10 153. 158. 153. 158. 10161600 158.
## # ℹ 608 more rows
stocks %>% filter(symbol == "MU" | symbol == "PANW")
## # A tibble: 3,368 × 8
## symbol date open high low close volume adjusted
## <chr> <date> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
## 1 MU 2020-01-02 54.8 55.5 54.5 55.4 20173200 54.0
## 2 MU 2020-01-03 54.2 55.3 54 54.5 16815800 53.2
## 3 MU 2020-01-06 53.8 54.1 53.2 53.6 18768700 52.2
## 4 MU 2020-01-07 55.4 58.4 55.4 58.3 49908200 56.8
## 5 MU 2020-01-08 58.1 58.4 57.1 57.5 29730800 56.1
## 6 MU 2020-01-09 58.3 58.5 56.5 57.3 22376100 55.9
## 7 MU 2020-01-10 57.5 57.5 56.3 56.7 19122800 55.3
## 8 MU 2020-01-13 57.0 57.8 56.9 57.5 16163000 56.0
## 9 MU 2020-01-14 57.8 58.3 56.5 57.5 26454300 56.1
## 10 MU 2020-01-15 57.0 57.1 55.8 56.2 21638600 54.8
## # ℹ 3,358 more rows
arrange(stocks, desc(date))
## # A tibble: 5,052 × 8
## symbol date open high low close volume adjusted
## <chr> <date> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
## 1 MU 2026-09-15 938. 945. 920. 928. 20434700 928.
## 2 PANW 2026-09-15 368. 380. 367. 375. 6476400 375.
## 3 CRWD 2026-09-15 233 244. 232. 242. 17227100 242.
## 4 MU 2026-09-14 906. 932. 903. 924. 27141900 924.
## 5 PANW 2026-09-14 346. 379. 340. 374. 12027300 374.
## 6 CRWD 2026-09-14 219 239. 216. 235. 25381500 235.
## 7 MU 2026-09-11 993. 994. 967. 975. 21740300 975.
## 8 PANW 2026-09-11 338. 341. 327. 331. 4679100 331.
## 9 CRWD 2026-09-11 208. 213. 204. 207. 6649500 207.
## 10 MU 2026-09-10 997 999 974. 977. 26230400 977.
## # ℹ 5,042 more rows
select(stocks, symbol, date, close)
## # A tibble: 5,052 × 3
## symbol date close
## <chr> <date> <dbl>
## 1 MU 2020-01-02 55.4
## 2 MU 2020-01-03 54.5
## 3 MU 2020-01-06 53.6
## 4 MU 2020-01-07 58.3
## 5 MU 2020-01-08 57.5
## 6 MU 2020-01-09 57.3
## 7 MU 2020-01-10 56.7
## 8 MU 2020-01-13 57.5
## 9 MU 2020-01-14 57.5
## 10 MU 2020-01-15 56.2
## # ℹ 5,042 more rows
stocks %>%
mutate(daily_price_diff = open - close) %>%
select(symbol, date, daily_price_diff)
## # A tibble: 5,052 × 3
## symbol date daily_price_diff
## <chr> <date> <dbl>
## 1 MU 2020-01-02 -0.540
## 2 MU 2020-01-03 -0.370
## 3 MU 2020-01-06 0.180
## 4 MU 2020-01-07 -2.89
## 5 MU 2020-01-08 0.570
## 6 MU 2020-01-09 1.01
## 7 MU 2020-01-10 0.800
## 8 MU 2020-01-13 -0.440
## 9 MU 2020-01-14 0.280
## 10 MU 2020-01-15 0.860
## # ℹ 5,042 more rows
# Calculate the overnight gap using lag()
stocks %>%
mutate(prev_close = lag(close),
overnight_gap = open - prev_close) %>%
select(symbol, date, close, prev_close, open, overnight_gap)
## # A tibble: 5,052 × 6
## symbol date close prev_close open overnight_gap
## <chr> <date> <dbl> <dbl> <dbl> <dbl>
## 1 MU 2020-01-02 55.4 NA 54.8 NA
## 2 MU 2020-01-03 54.5 55.4 54.2 -1.23
## 3 MU 2020-01-06 53.6 54.5 53.8 -0.780
## 4 MU 2020-01-07 58.3 53.6 55.4 1.81
## 5 MU 2020-01-08 57.5 58.3 58.1 -0.180
## 6 MU 2020-01-09 57.3 57.5 58.3 0.800
## 7 MU 2020-01-10 56.7 57.3 57.5 0.160
## 8 MU 2020-01-13 57.5 56.7 57.0 0.340
## 9 MU 2020-01-14 57.5 57.5 57.8 0.350
## 10 MU 2020-01-15 56.2 57.5 57.0 -0.490
## # ℹ 5,042 more rows
## cumsum
stocks %>%
mutate(cumulative_volume = cumsum(volume)) %>%
select(symbol, date, volume, cumulative_volume)
## # A tibble: 5,052 × 4
## symbol date volume cumulative_volume
## <chr> <date> <dbl> <dbl>
## 1 MU 2020-01-02 20173200 20173200
## 2 MU 2020-01-03 16815800 36989000
## 3 MU 2020-01-06 18768700 55757700
## 4 MU 2020-01-07 49908200 105665900
## 5 MU 2020-01-08 29730800 135396700
## 6 MU 2020-01-09 22376100 157772800
## 7 MU 2020-01-10 19122800 176895600
## 8 MU 2020-01-13 16163000 193058600
## 9 MU 2020-01-14 26454300 219512900
## 10 MU 2020-01-15 21638600 241151500
## # ℹ 5,042 more rows
stocks %>%
# Group by stock symbol
group_by(symbol) %>%
# Calculate average adjusted price
summarise(avg_price = mean(adjusted, na.rm = TRUE)) %>%
# Sort it
arrange(avg_price)
## # A tibble: 3 × 2
## symbol avg_price
## <chr> <dbl>
## 1 CRWD 68.5
## 2 PANW 124.
## 3 MU 146.