Import stock prices

stocks <- tq_get(c("DLR", "GOOG", "NVDA"),
                 get = "stock.prices",
                 from = "2020-01-01")
stocks
## # A tibble: 5,046 × 8
##    symbol date        open  high   low close  volume adjusted
##    <chr>  <date>     <dbl> <dbl> <dbl> <dbl>   <dbl>    <dbl>
##  1 DLR    2020-01-02  120.  120.  117.  118  1071900     94.8
##  2 DLR    2020-01-03  117.  120.  117.  120.  869400     96.3
##  3 DLR    2020-01-06  119.  120.  118.  119. 1151000     95.5
##  4 DLR    2020-01-07  118.  119.  117.  118. 1006400     94.5
##  5 DLR    2020-01-08  118.  119.  117.  119. 2553900     95.4
##  6 DLR    2020-01-09  118.  120.  118.  119.  980000     95.4
##  7 DLR    2020-01-10  119.  121.  118.  120. 2048800     96.7
##  8 DLR    2020-01-13  121.  122.  120.  122. 2072100     98.0
##  9 DLR    2020-01-14  122.  123.  120.  121. 2408200     97.0
## 10 DLR    2020-01-15  121.  122.  121.  121. 1443700     97.2
## # ℹ 5,036 more rows

Plot stock prices

stocks %>%
    
    ggplot(aes(x = date, y = adjusted, color = symbol)) +
    geom_line()

Apply the dplyr verbs you leared in chapter 5

Filter rows

stocks %>% filter(adjusted > 24)
## # A tibble: 4,334 × 8
##    symbol date        open  high   low close  volume adjusted
##    <chr>  <date>     <dbl> <dbl> <dbl> <dbl>   <dbl>    <dbl>
##  1 DLR    2020-01-02  120.  120.  117.  118  1071900     94.8
##  2 DLR    2020-01-03  117.  120.  117.  120.  869400     96.3
##  3 DLR    2020-01-06  119.  120.  118.  119. 1151000     95.5
##  4 DLR    2020-01-07  118.  119.  117.  118. 1006400     94.5
##  5 DLR    2020-01-08  118.  119.  117.  119. 2553900     95.4
##  6 DLR    2020-01-09  118.  120.  118.  119.  980000     95.4
##  7 DLR    2020-01-10  119.  121.  118.  120. 2048800     96.7
##  8 DLR    2020-01-13  121.  122.  120.  122. 2072100     98.0
##  9 DLR    2020-01-14  122.  123.  120.  121. 2408200     97.0
## 10 DLR    2020-01-15  121.  122.  121.  121. 1443700     97.2
## # ℹ 4,324 more rows
stocks %>% filter(symbol == "GOOG")
## # A tibble: 1,682 × 8
##    symbol date        open  high   low close   volume adjusted
##    <chr>  <date>     <dbl> <dbl> <dbl> <dbl>    <dbl>    <dbl>
##  1 GOOG   2020-01-02  67.1  68.4  67.1  68.4 28132000     67.7
##  2 GOOG   2020-01-03  67.4  68.6  67.3  68.0 23728000     67.4
##  3 GOOG   2020-01-06  67.5  69.8  67.5  69.7 34646000     69.1
##  4 GOOG   2020-01-07  69.9  70.1  69.5  69.7 30054000     69.0
##  5 GOOG   2020-01-08  69.6  70.6  69.5  70.2 30560000     69.6
##  6 GOOG   2020-01-09  71.0  71.4  70.5  71.0 30018000     70.3
##  7 GOOG   2020-01-10  71.4  71.7  70.9  71.5 36414000     70.8
##  8 GOOG   2020-01-13  71.8  72.0  71.3  72.0 33046000     71.3
##  9 GOOG   2020-01-14  72.0  72.1  71.4  71.5 31178000     70.9
## 10 GOOG   2020-01-15  71.5  72.1  71.5  72.0 25654000     71.3
## # ℹ 1,672 more rows
stocks %>% filter(adjusted > 100)
## # A tibble: 3,345 × 8
##    symbol date        open  high   low close  volume adjusted
##    <chr>  <date>     <dbl> <dbl> <dbl> <dbl>   <dbl>    <dbl>
##  1 DLR    2020-01-21  124.  126.  124.  126. 1286400     101.
##  2 DLR    2020-01-22  126.  127.  126.  126. 1648000     101.
##  3 DLR    2020-01-23  126.  128.  126.  127. 1258900     102.
##  4 DLR    2020-01-24  127.  129.  127.  128. 1916300     103.
##  5 DLR    2020-01-27  128.  129.  128.  129. 1527000     104.
##  6 DLR    2020-01-28  129.  130.  129.  130. 1678100     104.
##  7 DLR    2020-01-29  130.  130.  128.  128. 1895900     103.
##  8 DLR    2020-01-30  127.  128.  126.  126. 1594700     101.
##  9 DLR    2020-02-04  124.  125.  123.  125. 1222500     100.
## 10 DLR    2020-02-10  124.  126.  123.  126. 1854200     101.
## # ℹ 3,335 more rows
stocks %>% filter(symbol == "NVDA" & adjusted > 150)
## # A tibble: 306 × 8
##    symbol date        open  high   low close    volume adjusted
##    <chr>  <date>     <dbl> <dbl> <dbl> <dbl>     <dbl>    <dbl>
##  1 NVDA   2025-06-25  149.  154.  149.  154. 269146500     154.
##  2 NVDA   2025-06-26  156.  157.  154   155. 198145700     155.
##  3 NVDA   2025-06-27  156.  159.  155.  158. 263234500     157.
##  4 NVDA   2025-06-30  158.  159.  156.  158. 194580300     158.
##  5 NVDA   2025-07-01  156.  157.  151.  153. 213143600     153.
##  6 NVDA   2025-07-02  153.  158.  153.  157. 171224100     157.
##  7 NVDA   2025-07-03  158.  161.  158.  159. 143716100     159.
##  8 NVDA   2025-07-07  158.  159.  157.  158. 140139000     158.
##  9 NVDA   2025-07-08  159.  160.  158.  160  138133000     160.
## 10 NVDA   2025-07-09  161.  164.  161.  163. 183656400     162.
## # ℹ 296 more rows
stocks %>% filter(symbol == "NVDA" | symbol == "DLR")
## # A tibble: 3,364 × 8
##    symbol date        open  high   low close  volume adjusted
##    <chr>  <date>     <dbl> <dbl> <dbl> <dbl>   <dbl>    <dbl>
##  1 DLR    2020-01-02  120.  120.  117.  118  1071900     94.8
##  2 DLR    2020-01-03  117.  120.  117.  120.  869400     96.3
##  3 DLR    2020-01-06  119.  120.  118.  119. 1151000     95.5
##  4 DLR    2020-01-07  118.  119.  117.  118. 1006400     94.5
##  5 DLR    2020-01-08  118.  119.  117.  119. 2553900     95.4
##  6 DLR    2020-01-09  118.  120.  118.  119.  980000     95.4
##  7 DLR    2020-01-10  119.  121.  118.  120. 2048800     96.7
##  8 DLR    2020-01-13  121.  122.  120.  122. 2072100     98.0
##  9 DLR    2020-01-14  122.  123.  120.  121. 2408200     97.0
## 10 DLR    2020-01-15  121.  122.  121.  121. 1443700     97.2
## # ℹ 3,354 more rows

Arrange rows

arrange(stocks, desc(date))
## # A tibble: 5,046 × 8
##    symbol date        open  high   low close    volume adjusted
##    <chr>  <date>     <dbl> <dbl> <dbl> <dbl>     <dbl>    <dbl>
##  1 DLR    2026-09-11  187.  190.  186.  189.   1339800     189.
##  2 GOOG   2026-09-11  333.  340.  333.  335.  15792800     335.
##  3 NVDA   2026-09-11  221.  222   218.  218.  88804100     218.
##  4 DLR    2026-09-10  189.  191.  185.  185.   1534200     185.
##  5 GOOG   2026-09-10  326.  331.  326.  330.  16418900     330.
##  6 NVDA   2026-09-10  221.  221.  217.  218. 105768000     218.
##  7 DLR    2026-09-09  189.  191.  188.  189.   1503200     189.
##  8 GOOG   2026-09-09  329.  329.  326.  328.  19326900     328.
##  9 NVDA   2026-09-09  225.  226.  223.  224.  82955500     223.
## 10 DLR    2026-09-08  188.  192.  187.  190.   1573600     190.
## # ℹ 5,036 more rows

Select columns

select(stocks, symbol, date, close)
## # A tibble: 5,046 × 3
##    symbol date       close
##    <chr>  <date>     <dbl>
##  1 DLR    2020-01-02  118 
##  2 DLR    2020-01-03  120.
##  3 DLR    2020-01-06  119.
##  4 DLR    2020-01-07  118.
##  5 DLR    2020-01-08  119.
##  6 DLR    2020-01-09  119.
##  7 DLR    2020-01-10  120.
##  8 DLR    2020-01-13  122.
##  9 DLR    2020-01-14  121.
## 10 DLR    2020-01-15  121.
## # ℹ 5,036 more rows

Add columns

stocks %>%
  mutate(daily_price_diff = open - close) %>%
  select(symbol, date, daily_price_diff)
## # A tibble: 5,046 × 3
##    symbol date       daily_price_diff
##    <chr>  <date>                <dbl>
##  1 DLR    2020-01-02           2.01  
##  2 DLR    2020-01-03          -2.71  
##  3 DLR    2020-01-06           0.610 
##  4 DLR    2020-01-07           0.690 
##  5 DLR    2020-01-08          -0.870 
##  6 DLR    2020-01-09          -0.420 
##  7 DLR    2020-01-10          -1.31  
##  8 DLR    2020-01-13          -1.36  
##  9 DLR    2020-01-14           1.22  
## 10 DLR    2020-01-15          -0.0300
## # ℹ 5,036 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,046 × 6
##    symbol date       close prev_close  open overnight_gap
##    <chr>  <date>     <dbl>      <dbl> <dbl>         <dbl>
##  1 DLR    2020-01-02  118         NA   120.        NA    
##  2 DLR    2020-01-03  120.       118   117.        -0.770
##  3 DLR    2020-01-06  119.       120.  119.        -0.470
##  4 DLR    2020-01-07  118.       119.  118.        -0.480
##  5 DLR    2020-01-08  119.       118.  118.         0.150
##  6 DLR    2020-01-09  119.       119.  118.        -0.410
##  7 DLR    2020-01-10  120.       119.  119.         0.340
##  8 DLR    2020-01-13  122.       120.  121.         0.240
##  9 DLR    2020-01-14  121.       122.  122.         0    
## 10 DLR    2020-01-15  121.       121.  121.         0.210
## # ℹ 5,036 more rows
## cumsum
stocks %>%
  mutate(cumulative_volume = cumsum(volume)) %>%
  select(symbol, date, volume, cumulative_volume)
## # A tibble: 5,046 × 4
##    symbol date        volume cumulative_volume
##    <chr>  <date>       <dbl>             <dbl>
##  1 DLR    2020-01-02 1071900           1071900
##  2 DLR    2020-01-03  869400           1941300
##  3 DLR    2020-01-06 1151000           3092300
##  4 DLR    2020-01-07 1006400           4098700
##  5 DLR    2020-01-08 2553900           6652600
##  6 DLR    2020-01-09  980000           7632600
##  7 DLR    2020-01-10 2048800           9681400
##  8 DLR    2020-01-13 2072100          11753500
##  9 DLR    2020-01-14 2408200          14161700
## 10 DLR    2020-01-15 1443700          15605400
## # ℹ 5,036 more rows

Summarise with groups

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 NVDA        72.1
## 2 DLR        133. 
## 3 GOOG       155.