Import stock prices
stocks <- tq_get(c("NVDA", "MSFT", "GOOGL", "META"),
get = "stock.prices",
from = "2020-01-01")
stocks
## # A tibble: 5,716 × 8
## symbol date open high low close volume adjusted
## <chr> <date> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
## 1 NVDA 2020-01-02 5.97 6.00 5.92 6.00 237536000 5.97
## 2 NVDA 2020-01-03 5.88 5.95 5.85 5.90 205384000 5.88
## 3 NVDA 2020-01-06 5.81 5.93 5.78 5.93 262636000 5.90
## 4 NVDA 2020-01-07 5.95 6.04 5.91 6.00 314856000 5.97
## 5 NVDA 2020-01-08 5.99 6.05 5.95 6.01 277108000 5.98
## 6 NVDA 2020-01-09 6.10 6.15 6.02 6.08 255112000 6.05
## 7 NVDA 2020-01-10 6.18 6.21 6.09 6.11 316296000 6.08
## 8 NVDA 2020-01-13 6.19 6.32 6.17 6.30 319840000 6.27
## 9 NVDA 2020-01-14 6.26 6.28 6.17 6.18 359088000 6.16
## 10 NVDA 2020-01-15 6.19 6.22 6.11 6.14 263104000 6.11
## # ℹ 5,706 more rows
Apply the dplyr verbs you learned in chapter 5
filter rows
stocks %>% filter(adjusted > 24)
## # A tibble: 5,005 × 8
## symbol date open high low close volume adjusted
## <chr> <date> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
## 1 NVDA 2021-10-26 24.0 25.3 23.9 24.7 485898000 24.7
## 2 NVDA 2021-10-27 24.5 25.1 24.3 24.5 245990000 24.4
## 3 NVDA 2021-10-28 24.9 25.0 24.5 24.9 234204000 24.9
## 4 NVDA 2021-10-29 25.0 25.7 25 25.6 292503000 25.5
## 5 NVDA 2021-11-01 25.6 25.9 25.2 25.8 265740000 25.8
## 6 NVDA 2021-11-02 25.8 26.7 25.8 26.4 294112000 26.3
## 7 NVDA 2021-11-03 26.7 26.8 26.2 26.6 239910000 26.5
## 8 NVDA 2021-11-04 27.2 31.4 27.1 29.8 1153631000 29.7
## 9 NVDA 2021-11-05 30.2 31.4 29.4 29.8 851260000 29.7
## 10 NVDA 2021-11-08 30.1 31.1 29.9 30.8 503101000 30.7
## # ℹ 4,995 more rows
stocks %>% filter(high > 780)
## # A tibble: 6 × 8
## symbol date open high low close volume adjusted
## <chr> <date> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
## 1 META 2025-07-31 775. 785. 766. 773. 38831100 773.
## 2 META 2025-08-05 776. 783. 763 763. 11640300 763.
## 3 META 2025-08-12 773 794. 772. 790 14563100 790
## 4 META 2025-08-13 791. 795. 778. 780. 8811800 780.
## 5 META 2025-08-14 778. 788. 773. 782. 8116200 782.
## 6 META 2025-08-15 784. 796. 781. 785. 13375400 785.
filter(stocks, high < 400, low > 375)
## # A tibble: 55 × 8
## symbol date open high low close volume adjusted
## <chr> <date> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
## 1 MSFT 2023-11-24 377. 378. 375. 377. 10176600 373.
## 2 MSFT 2023-11-27 377. 381. 376. 379. 22179200 374.
## 3 MSFT 2023-11-28 378. 383 378. 383. 20453100 378.
## 4 MSFT 2023-11-29 384. 384. 377. 379. 28963400 374.
## 5 MSFT 2023-11-30 378. 380. 375. 379. 30554400 374.
## 6 MSFT 2024-01-10 376. 384. 376. 383. 25514200 378.
## 7 MSFT 2024-01-11 386 391. 380. 385. 27850800 380.
## 8 MSFT 2024-01-12 385. 389. 385. 388. 21661200 383.
## 9 MSFT 2024-01-16 394. 394. 388. 390. 27202300 385.
## 10 MSFT 2024-01-17 388. 390. 385. 389. 22234100 384.
## # ℹ 45 more rows
arrange rows
arrange(stocks, date, symbol, high)
## # A tibble: 5,716 × 8
## symbol date open high low close volume adjusted
## <chr> <date> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
## 1 GOOGL 2020-01-02 67.4 68.4 67.3 68.4 27278000 68.0
## 2 META 2020-01-02 207. 210. 206. 210. 12077100 209.
## 3 MSFT 2020-01-02 159. 161. 158. 161. 22622100 153.
## 4 NVDA 2020-01-02 5.97 6.00 5.92 6.00 237536000 5.97
## 5 GOOGL 2020-01-03 67.4 68.7 67.4 68.1 23408000 67.6
## 6 META 2020-01-03 207. 210. 207. 209. 11188400 208.
## 7 MSFT 2020-01-03 158. 160. 158. 159. 21116200 151.
## 8 NVDA 2020-01-03 5.88 5.95 5.85 5.90 205384000 5.88
## 9 GOOGL 2020-01-06 67.6 69.9 67.6 69.9 46768000 69.4
## 10 META 2020-01-06 207. 213. 207. 213. 17058900 211.
## # ℹ 5,706 more rows
arrange(stocks,desc(date))
## # A tibble: 5,716 × 8
## symbol date open high low close volume adjusted
## <chr> <date> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
## 1 NVDA 2025-09-09 169. 171. 167. 171. 156305800 171.
## 2 MSFT 2025-09-09 501. 502. 498. 498. 14349500 498.
## 3 GOOGL 2025-09-09 234. 240. 233. 240. 38012800 240.
## 4 META 2025-09-09 757. 766. 753. 766. 10986800 766.
## 5 NVDA 2025-09-08 168. 171. 167. 168. 163769100 168.
## 6 MSFT 2025-09-08 498. 501. 495. 498. 16771000 498.
## 7 GOOGL 2025-09-08 235. 238. 234. 234. 32474700 234.
## 8 META 2025-09-08 756 767. 752. 752. 13087800 752.
## 9 NVDA 2025-09-05 168. 169. 164. 167. 224441400 167.
## 10 MSFT 2025-09-05 509. 512. 492. 495 31994800 495
## # ℹ 5,706 more rows
select columns
select(stocks, date, symbol, open:close)
## # A tibble: 5,716 × 6
## date symbol open high low close
## <date> <chr> <dbl> <dbl> <dbl> <dbl>
## 1 2020-01-02 NVDA 5.97 6.00 5.92 6.00
## 2 2020-01-03 NVDA 5.88 5.95 5.85 5.90
## 3 2020-01-06 NVDA 5.81 5.93 5.78 5.93
## 4 2020-01-07 NVDA 5.95 6.04 5.91 6.00
## 5 2020-01-08 NVDA 5.99 6.05 5.95 6.01
## 6 2020-01-09 NVDA 6.10 6.15 6.02 6.08
## 7 2020-01-10 NVDA 6.18 6.21 6.09 6.11
## 8 2020-01-13 NVDA 6.19 6.32 6.17 6.30
## 9 2020-01-14 NVDA 6.26 6.28 6.17 6.18
## 10 2020-01-15 NVDA 6.19 6.22 6.11 6.14
## # ℹ 5,706 more rows
select(stocks, -(open:close))
## # A tibble: 5,716 × 4
## symbol date volume adjusted
## <chr> <date> <dbl> <dbl>
## 1 NVDA 2020-01-02 237536000 5.97
## 2 NVDA 2020-01-03 205384000 5.88
## 3 NVDA 2020-01-06 262636000 5.90
## 4 NVDA 2020-01-07 314856000 5.97
## 5 NVDA 2020-01-08 277108000 5.98
## 6 NVDA 2020-01-09 255112000 6.05
## 7 NVDA 2020-01-10 316296000 6.08
## 8 NVDA 2020-01-13 319840000 6.27
## 9 NVDA 2020-01-14 359088000 6.16
## 10 NVDA 2020-01-15 263104000 6.11
## # ℹ 5,706 more rows
add columns
mutate(stocks,
price_change = close - open) %>%
select(date, symbol, price_change)
## # A tibble: 5,716 × 3
## date symbol price_change
## <date> <chr> <dbl>
## 1 2020-01-02 NVDA 0.0290
## 2 2020-01-03 NVDA 0.0243
## 3 2020-01-06 NVDA 0.118
## 4 2020-01-07 NVDA 0.0433
## 5 2020-01-08 NVDA 0.0155
## 6 2020-01-09 NVDA -0.0208
## 7 2020-01-10 NVDA -0.0753
## 8 2020-01-13 NVDA 0.108
## 9 2020-01-14 NVDA -0.0745
## 10 2020-01-15 NVDA -0.0555
## # ℹ 5,706 more rows
mutate(stocks,
price_change = close - open) %>%
select(price_change)
## # A tibble: 5,716 × 1
## price_change
## <dbl>
## 1 0.0290
## 2 0.0243
## 3 0.118
## 4 0.0433
## 5 0.0155
## 6 -0.0208
## 7 -0.0753
## 8 0.108
## 9 -0.0745
## 10 -0.0555
## # ℹ 5,706 more rows
transmute(stocks,
price_change = close - open)
## # A tibble: 5,716 × 1
## price_change
## <dbl>
## 1 0.0290
## 2 0.0243
## 3 0.118
## 4 0.0433
## 5 0.0155
## 6 -0.0208
## 7 -0.0753
## 8 0.108
## 9 -0.0745
## 10 -0.0555
## # ℹ 5,706 more rows
summarise with groups
stocks %>%
group_by(symbol) %>%
summarise(avg_price_change = mean(close - open, na.rm = TRUE)) %>%
arrange(avg_price_change)
## # A tibble: 4 × 2
## symbol avg_price_change
## <chr> <dbl>
## 1 NVDA 0.0107
## 2 GOOGL 0.0872
## 3 MSFT 0.0903
## 4 META 0.111
stocks %>%
group_by(symbol) %>%
summarise(count = n(),
avg_volume = mean(volume, na.rm =TRUE),
price_change = mean(close - open, na.rm = TRUE))
## # A tibble: 4 × 4
## symbol count avg_volume price_change
## <chr> <int> <dbl> <dbl>
## 1 GOOGL 1429 33531858. 0.0872
## 2 META 1429 22151370. 0.111
## 3 MSFT 1429 27865120. 0.0903
## 4 NVDA 1429 421692336. 0.0107