Import stock prices

stocks <- tq_get(c("DLR", "GOOG", "NVDA"),
                 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 DLR    2020-01-02  120.  120.  117.  118  1071900     94.1
##  2 DLR    2020-01-03  117.  120.  117.  120.  869400     95.7
##  3 DLR    2020-01-06  119.  120.  118.  119. 1151000     94.8
##  4 DLR    2020-01-07  118.  119.  117.  118. 1006400     93.9
##  5 DLR    2020-01-08  118.  119.  117.  119. 2553900     94.7
##  6 DLR    2020-01-09  118.  120.  118.  119.  980000     94.7
##  7 DLR    2020-01-10  119.  121.  118.  120. 2048800     96.0
##  8 DLR    2020-01-13  121.  122.  120.  122. 2072100     97.3
##  9 DLR    2020-01-14  122.  123.  120.  121. 2408200     96.3
## 10 DLR    2020-01-15  121.  122.  121.  121. 1443700     96.5
## # ℹ 5,042 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,340 × 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.1
##  2 DLR    2020-01-03  117.  120.  117.  120.  869400     95.7
##  3 DLR    2020-01-06  119.  120.  118.  119. 1151000     94.8
##  4 DLR    2020-01-07  118.  119.  117.  118. 1006400     93.9
##  5 DLR    2020-01-08  118.  119.  117.  119. 2553900     94.7
##  6 DLR    2020-01-09  118.  120.  118.  119.  980000     94.7
##  7 DLR    2020-01-10  119.  121.  118.  120. 2048800     96.0
##  8 DLR    2020-01-13  121.  122.  120.  122. 2072100     97.3
##  9 DLR    2020-01-14  122.  123.  120.  121. 2408200     96.3
## 10 DLR    2020-01-15  121.  122.  121.  121. 1443700     96.5
## # ℹ 4,330 more rows
stocks %>% filter(symbol == "GOOG")
## # A tibble: 1,684 × 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,674 more rows
stocks %>% filter(adjusted > 100)
## # A tibble: 3,346 × 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     100.
##  2 DLR    2020-01-22  126.  127.  126.  126. 1648000     101.
##  3 DLR    2020-01-23  126.  128.  126.  127. 1258900     101.
##  4 DLR    2020-01-24  127.  129.  127.  128. 1916300     102.
##  5 DLR    2020-01-27  128.  129.  128.  129. 1527000     103.
##  6 DLR    2020-01-28  129.  130.  129.  130. 1678100     104.
##  7 DLR    2020-01-29  130.  130.  128.  128. 1895900     102.
##  8 DLR    2020-01-30  127.  128.  126.  126. 1594700     100.
##  9 DLR    2020-02-10  124.  126.  123.  126. 1854200     101.
## 10 DLR    2020-02-11  126.  128.  125.  126. 1869900     100.
## # ℹ 3,336 more rows
stocks %>% filter(symbol == "NVDA" & adjusted > 150)
## # A tibble: 308 × 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.
## # ℹ 298 more rows
stocks %>% filter(symbol == "NVDA" | symbol == "DLR")
## # A tibble: 3,368 × 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.1
##  2 DLR    2020-01-03  117.  120.  117.  120.  869400     95.7
##  3 DLR    2020-01-06  119.  120.  118.  119. 1151000     94.8
##  4 DLR    2020-01-07  118.  119.  117.  118. 1006400     93.9
##  5 DLR    2020-01-08  118.  119.  117.  119. 2553900     94.7
##  6 DLR    2020-01-09  118.  120.  118.  119.  980000     94.7
##  7 DLR    2020-01-10  119.  121.  118.  120. 2048800     96.0
##  8 DLR    2020-01-13  121.  122.  120.  122. 2072100     97.3
##  9 DLR    2020-01-14  122.  123.  120.  121. 2408200     96.3
## 10 DLR    2020-01-15  121.  122.  121.  121. 1443700     96.5
## # ℹ 3,358 more rows

Arrange 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 DLR    2026-09-15  179.  179.  175.  179.   2253100     179.
##  2 GOOG   2026-09-15  343.  344.  339.  341.  13341600     341.
##  3 NVDA   2026-09-15  213.  214.  211.  212.  87726200     212.
##  4 DLR    2026-09-14  186.  186.  179.  179.   2044900     178.
##  5 GOOG   2026-09-14  339.  346.  339.  346.  22484400     346.
##  6 NVDA   2026-09-14  211.  213.  209.  211. 132267200     211.
##  7 DLR    2026-09-11  187.  190.  186.  189.   1339800     187.
##  8 GOOG   2026-09-11  333.  340.  333.  335.  15820700     335.
##  9 NVDA   2026-09-11  221.  222   218.  218.  89060100     218.
## 10 DLR    2026-09-10  189.  191.  185.  185.   1534200     184.
## # ℹ 5,042 more rows

Select columns

select(stocks, symbol, date, close)
## # A tibble: 5,052 × 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,042 more rows

Add columns

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 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,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 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,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 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,042 more rows

Summarize by 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.3
## 2 DLR        132. 
## 3 GOOG       155.