Import stock prices
stocks <- tq_get(c("AAPL", "MSFT"),
get = "stock.prices",
from = "2016-01-01")
stocks
## # A tibble: 4,896 × 8
## symbol date open high low close volume adjusted
## <chr> <date> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
## 1 AAPL 2016-01-04 25.7 26.3 25.5 26.3 270597600 23.8
## 2 AAPL 2016-01-05 26.4 26.5 25.6 25.7 223164000 23.2
## 3 AAPL 2016-01-06 25.1 25.6 25.0 25.2 273829600 22.7
## 4 AAPL 2016-01-07 24.7 25.0 24.1 24.1 324377600 21.8
## 5 AAPL 2016-01-08 24.6 24.8 24.2 24.2 283192000 21.9
## 6 AAPL 2016-01-11 24.7 24.8 24.3 24.6 198957600 22.2
## 7 AAPL 2016-01-12 25.1 25.2 24.7 25.0 196616800 22.6
## 8 AAPL 2016-01-13 25.1 25.3 24.3 24.3 249758400 22.0
## 9 AAPL 2016-01-14 24.5 25.1 23.9 24.9 252680400 22.5
## 10 AAPL 2016-01-15 24.0 24.4 23.8 24.3 319335600 21.9
## # ℹ 4,886 more rows
Plot stock prices
stocks %>%
ggplot(aes(x = date, y = adjusted, color = symbol)) +
geom_line()

Apply the dplyr verbs that we learned in chapter 5
import data
stocks %>% filter(adjusted > 24)
## # A tibble: 4,773 × 8
## symbol date open high low close volume adjusted
## <chr> <date> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
## 1 AAPL 2016-03-16 26.2 26.6 26.1 26.5 153214000 24.0
## 2 AAPL 2016-03-17 26.4 26.6 26.2 26.5 137682800 24.0
## 3 AAPL 2016-03-18 26.6 26.6 26.3 26.5 176820800 24.0
## 4 AAPL 2016-03-21 26.5 26.9 26.3 26.5 142010800 24.0
## 5 AAPL 2016-03-22 26.3 26.8 26.3 26.7 129777600 24.2
## 6 AAPL 2016-03-23 26.6 26.8 26.5 26.5 102814000 24.1
## 7 AAPL 2016-03-29 26.2 26.9 26.2 26.9 124760400 24.4
## 8 AAPL 2016-03-30 27.2 27.6 27.1 27.4 182404400 24.9
## 9 AAPL 2016-03-31 27.4 27.5 27.2 27.2 103553600 24.7
## 10 AAPL 2016-04-01 27.2 27.5 27.0 27.5 103496000 25.0
## # ℹ 4,763 more rows
filter rows
filter(stocks, close < 30)
## # A tibble: 264 × 8
## symbol date open high low close volume adjusted
## <chr> <date> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
## 1 AAPL 2016-01-04 25.7 26.3 25.5 26.3 270597600 23.8
## 2 AAPL 2016-01-05 26.4 26.5 25.6 25.7 223164000 23.2
## 3 AAPL 2016-01-06 25.1 25.6 25.0 25.2 273829600 22.7
## 4 AAPL 2016-01-07 24.7 25.0 24.1 24.1 324377600 21.8
## 5 AAPL 2016-01-08 24.6 24.8 24.2 24.2 283192000 21.9
## 6 AAPL 2016-01-11 24.7 24.8 24.3 24.6 198957600 22.2
## 7 AAPL 2016-01-12 25.1 25.2 24.7 25.0 196616800 22.6
## 8 AAPL 2016-01-13 25.1 25.3 24.3 24.3 249758400 22.0
## 9 AAPL 2016-01-14 24.5 25.1 23.9 24.9 252680400 22.5
## 10 AAPL 2016-01-15 24.0 24.4 23.8 24.3 319335600 21.9
## # ℹ 254 more rows
filter(stocks, symbol == "AAPL")
## # A tibble: 2,448 × 8
## symbol date open high low close volume adjusted
## <chr> <date> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
## 1 AAPL 2016-01-04 25.7 26.3 25.5 26.3 270597600 23.8
## 2 AAPL 2016-01-05 26.4 26.5 25.6 25.7 223164000 23.2
## 3 AAPL 2016-01-06 25.1 25.6 25.0 25.2 273829600 22.7
## 4 AAPL 2016-01-07 24.7 25.0 24.1 24.1 324377600 21.8
## 5 AAPL 2016-01-08 24.6 24.8 24.2 24.2 283192000 21.9
## 6 AAPL 2016-01-11 24.7 24.8 24.3 24.6 198957600 22.2
## 7 AAPL 2016-01-12 25.1 25.2 24.7 25.0 196616800 22.6
## 8 AAPL 2016-01-13 25.1 25.3 24.3 24.3 249758400 22.0
## 9 AAPL 2016-01-14 24.5 25.1 23.9 24.9 252680400 22.5
## 10 AAPL 2016-01-15 24.0 24.4 23.8 24.3 319335600 21.9
## # ℹ 2,438 more rows
filter(stocks, open < 30)
## # A tibble: 264 × 8
## symbol date open high low close volume adjusted
## <chr> <date> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
## 1 AAPL 2016-01-04 25.7 26.3 25.5 26.3 270597600 23.8
## 2 AAPL 2016-01-05 26.4 26.5 25.6 25.7 223164000 23.2
## 3 AAPL 2016-01-06 25.1 25.6 25.0 25.2 273829600 22.7
## 4 AAPL 2016-01-07 24.7 25.0 24.1 24.1 324377600 21.8
## 5 AAPL 2016-01-08 24.6 24.8 24.2 24.2 283192000 21.9
## 6 AAPL 2016-01-11 24.7 24.8 24.3 24.6 198957600 22.2
## 7 AAPL 2016-01-12 25.1 25.2 24.7 25.0 196616800 22.6
## 8 AAPL 2016-01-13 25.1 25.3 24.3 24.3 249758400 22.0
## 9 AAPL 2016-01-14 24.5 25.1 23.9 24.9 252680400 22.5
## 10 AAPL 2016-01-15 24.0 24.4 23.8 24.3 319335600 21.9
## # ℹ 254 more rows
arrange rows
arrange(stocks, desc(date))
## # A tibble: 4,896 × 8
## symbol date open high low close volume adjusted
## <chr> <date> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
## 1 AAPL 2025-09-26 254. 258. 254. 255. 46045700 255.
## 2 MSFT 2025-09-26 510. 514. 507. 511. 16200700 511.
## 3 AAPL 2025-09-25 253. 257. 252. 257. 55202100 257.
## 4 MSFT 2025-09-25 508. 510. 505. 507. 15786500 507.
## 5 AAPL 2025-09-24 255. 256. 251. 252. 42303700 252.
## 6 MSFT 2025-09-24 510. 512. 507. 510. 13533700 510.
## 7 AAPL 2025-09-23 256. 257. 254. 254. 60275200 254.
## 8 MSFT 2025-09-23 514. 515. 507. 509. 19799600 509.
## 9 AAPL 2025-09-22 248. 257. 248. 256. 105517400 256.
## 10 MSFT 2025-09-22 516. 518. 513. 514. 20009300 514.
## # ℹ 4,886 more rows
arrange(stocks, desc(volume))
## # A tibble: 4,896 × 8
## symbol date open high low close volume adjusted
## <chr> <date> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
## 1 AAPL 2016-01-27 24.0 24.2 23.3 23.4 533478800 21.1
## 2 AAPL 2016-04-27 24 24.7 23.9 24.5 458408400 22.2
## 3 AAPL 2017-02-01 31.8 32.6 31.8 32.2 447940000 29.7
## 4 AAPL 2016-09-14 27.2 28.3 27.1 27.9 443554800 25.7
## 5 AAPL 2020-02-28 64.3 69.6 64.1 68.3 426510000 66.2
## 6 AAPL 2020-03-12 64.0 67.5 62 62.1 418474000 60.1
## 7 AAPL 2020-03-20 61.8 63.0 57 57.3 401693200 55.5
## 8 AAPL 2018-09-21 55.2 55.3 54.3 54.4 384986800 51.6
## 9 AAPL 2018-12-21 39.2 39.5 37.4 37.7 382978400 35.9
## 10 AAPL 2020-07-31 103. 106. 101. 106. 374336800 103.
## # ℹ 4,886 more rows
arrange(stocks, desc(close))
## # A tibble: 4,896 × 8
## symbol date open high low close volume adjusted
## <chr> <date> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
## 1 MSFT 2025-08-04 528. 538. 528. 536. 25349000 535.
## 2 MSFT 2025-07-31 555. 555. 532. 534. 51617300 533.
## 3 MSFT 2025-08-12 524. 531. 523. 529. 18667000 528.
## 4 MSFT 2025-08-05 537. 537. 527. 528. 19171600 527.
## 5 MSFT 2025-08-06 531. 532. 524. 525. 21355700 524.
## 6 MSFT 2025-08-01 535 536. 521. 524. 28977600 523.
## 7 MSFT 2025-08-14 523. 526. 520. 522. 20269100 522.
## 8 MSFT 2025-08-08 523. 525. 519. 522. 15531000 521.
## 9 MSFT 2025-08-11 522. 528. 520. 522. 20194400 521.
## 10 MSFT 2025-08-07 527. 528. 518. 521. 16079100 520.
## # ℹ 4,886 more rows
select rows
select(stocks, symbol)
## # A tibble: 4,896 × 1
## symbol
## <chr>
## 1 AAPL
## 2 AAPL
## 3 AAPL
## 4 AAPL
## 5 AAPL
## 6 AAPL
## 7 AAPL
## 8 AAPL
## 9 AAPL
## 10 AAPL
## # ℹ 4,886 more rows
select(stocks, symbol:open, close)
## # A tibble: 4,896 × 4
## symbol date open close
## <chr> <date> <dbl> <dbl>
## 1 AAPL 2016-01-04 25.7 26.3
## 2 AAPL 2016-01-05 26.4 25.7
## 3 AAPL 2016-01-06 25.1 25.2
## 4 AAPL 2016-01-07 24.7 24.1
## 5 AAPL 2016-01-08 24.6 24.2
## 6 AAPL 2016-01-11 24.7 24.6
## 7 AAPL 2016-01-12 25.1 25.0
## 8 AAPL 2016-01-13 25.1 24.3
## 9 AAPL 2016-01-14 24.5 24.9
## 10 AAPL 2016-01-15 24.0 24.3
## # ℹ 4,886 more rows
select(stocks, symbol, date, high, low)
## # A tibble: 4,896 × 4
## symbol date high low
## <chr> <date> <dbl> <dbl>
## 1 AAPL 2016-01-04 26.3 25.5
## 2 AAPL 2016-01-05 26.5 25.6
## 3 AAPL 2016-01-06 25.6 25.0
## 4 AAPL 2016-01-07 25.0 24.1
## 5 AAPL 2016-01-08 24.8 24.2
## 6 AAPL 2016-01-11 24.8 24.3
## 7 AAPL 2016-01-12 25.2 24.7
## 8 AAPL 2016-01-13 25.3 24.3
## 9 AAPL 2016-01-14 25.1 23.9
## 10 AAPL 2016-01-15 24.4 23.8
## # ℹ 4,886 more rows
add coluymn
mutate(stocks,
gain = high - low) %>%
select(symbol)
## # A tibble: 4,896 × 1
## symbol
## <chr>
## 1 AAPL
## 2 AAPL
## 3 AAPL
## 4 AAPL
## 5 AAPL
## 6 AAPL
## 7 AAPL
## 8 AAPL
## 9 AAPL
## 10 AAPL
## # ℹ 4,886 more rows
transmute(stocks,
gain = high - low)
## # A tibble: 4,896 × 1
## gain
## <dbl>
## 1 0.843
## 2 0.860
## 3 0.625
## 4 0.925
## 5 0.587
## 6 0.430
## 7 0.463
## 8 0.972
## 9 1.19
## 10 0.587
## # ℹ 4,886 more rows
select(stocks, volume) %>%
mutate(volume_lag1 = lag(volume))
## # A tibble: 4,896 × 2
## volume volume_lag1
## <dbl> <dbl>
## 1 270597600 NA
## 2 223164000 270597600
## 3 273829600 223164000
## 4 324377600 273829600
## 5 283192000 324377600
## 6 198957600 283192000
## 7 196616800 198957600
## 8 249758400 196616800
## 9 252680400 249758400
## 10 319335600 252680400
## # ℹ 4,886 more rows