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