Import stock prices

stocks <- tq_get(c("GOOGL", "MSFT", "NVDA", "META"),
                 get = "stock.prices",
                 from = "2025-01-01")
stocks
## # A tibble: 684 × 8
##    symbol date        open  high   low close   volume adjusted
##    <chr>  <date>     <dbl> <dbl> <dbl> <dbl>    <dbl>    <dbl>
##  1 GOOGL  2025-01-02  191.  192   188.  189. 20370800     189.
##  2 GOOGL  2025-01-03  191.  193.  190.  192. 18596200     191.
##  3 GOOGL  2025-01-06  194.  198.  194.  197. 29563600     196.
##  4 GOOGL  2025-01-07  197.  201   195.  195. 26487200     195.
##  5 GOOGL  2025-01-08  193.  196.  192.  194. 24864800     193.
##  6 GOOGL  2025-01-10  194.  197.  190.  192. 26665200     191.
##  7 GOOGL  2025-01-13  190.  191.  187.  191. 21823700     190.
##  8 GOOGL  2025-01-14  191.  192.  188.  190. 17174900     189.
##  9 GOOGL  2025-01-15  193.  196.  192.  196. 21776000     195.
## 10 GOOGL  2025-01-16  194.  195.  193.  193. 17815400     192.
## # ℹ 674 more rows

Plot stock prices

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

Apply the dplyr verbs you learned in Chapter 5

Filter rows

stocks %>%
    filter(symbol == "MSFT", open > 150)
## # A tibble: 171 × 8
##    symbol date        open  high   low close   volume adjusted
##    <chr>  <date>     <dbl> <dbl> <dbl> <dbl>    <dbl>    <dbl>
##  1 MSFT   2025-01-02  426.  426.  415.  419. 16896500     416.
##  2 MSFT   2025-01-03  421.  424.  420.  423. 16662900     421.
##  3 MSFT   2025-01-06  428   434.  425.  428. 20573600     426.
##  4 MSFT   2025-01-07  429   431.  421.  422. 18139100     420.
##  5 MSFT   2025-01-08  423.  427.  422.  425. 15054600     422.
##  6 MSFT   2025-01-10  425.  425.  415.  419. 20201100     417.
##  7 MSFT   2025-01-13  415.  418.  412.  417. 17604800     415.
##  8 MSFT   2025-01-14  418.  420.  411.  416. 16935900     413.
##  9 MSFT   2025-01-15  419.  428.  418.  426. 19637800     424.
## 10 MSFT   2025-01-16  429.  429.  424.  425. 15300000     422.
## # ℹ 161 more rows

Arrange rows

stocks %>%
    arrange(close)
## # A tibble: 684 × 8
##    symbol date        open  high   low close    volume adjusted
##    <chr>  <date>     <dbl> <dbl> <dbl> <dbl>     <dbl>    <dbl>
##  1 NVDA   2025-04-04  98.9 100.   92.1  94.3 532273800     94.3
##  2 NVDA   2025-04-08 104.  106.   94.5  96.3 476243400     96.3
##  3 NVDA   2025-04-21  98.8  99.4  95.0  96.9 288501100     96.9
##  4 NVDA   2025-04-07  87.5 102.   86.6  97.6 611041300     97.6
##  5 NVDA   2025-04-22  98.8  99.8  97.3  98.9 241004800     98.9
##  6 NVDA   2025-04-17 104.  104.  100.  101.  292517500    101. 
##  7 NVDA   2025-04-03 104.  106.  102.  102.  338769400    102. 
##  8 NVDA   2025-04-23 105.  105.  102.  103.  247526000    103. 
##  9 NVDA   2025-04-16 105.  107.  100.  104.  397016900    104. 
## 10 NVDA   2025-04-24 103.  107.  103.  106.  220815000    106. 
## # ℹ 674 more rows

Select columns

stocks %>%
    filter(symbol == "META") %>%
    select(symbol, date, open, high, low, close)
## # A tibble: 171 × 6
##    symbol date        open  high   low close
##    <chr>  <date>     <dbl> <dbl> <dbl> <dbl>
##  1 META   2025-01-02  590.  605.  588.  599.
##  2 META   2025-01-03  605.  610.  596.  605.
##  3 META   2025-01-06  612.  631.  606.  630.
##  4 META   2025-01-07  632.  632.  608.  618.
##  5 META   2025-01-08  613.  616.  603.  611.
##  6 META   2025-01-10  610.  630.  597.  616.
##  7 META   2025-01-13  607.  609.  598.  608.
##  8 META   2025-01-14  605.  605.  589.  594.
##  9 META   2025-01-15  610.  622.  606.  617.
## 10 META   2025-01-16  612.  616.  610.  611.
## # ℹ 161 more rows

Add columns

stocks %>% 
    filter(symbol == "NVDA") %>%
    mutate(daily_range = high - low)
## # A tibble: 171 × 9
##    symbol date        open  high   low close    volume adjusted daily_range
##    <chr>  <date>     <dbl> <dbl> <dbl> <dbl>     <dbl>    <dbl>       <dbl>
##  1 NVDA   2025-01-02  136   139.  135.  138. 198247200     138.        4.25
##  2 NVDA   2025-01-03  140.  145.  140.  144. 229322500     144.        5.17
##  3 NVDA   2025-01-06  149.  152.  148.  149. 265377400     149.        4.34
##  4 NVDA   2025-01-07  153.  153.  140.  140. 351782200     140.       13.1 
##  5 NVDA   2025-01-08  143.  144.  138.  140. 227349900     140.        6.39
##  6 NVDA   2025-01-10  137.  140.  134.  136. 207602500     136.        5.70
##  7 NVDA   2025-01-13  130.  133.  130.  133. 204808900     133.        3.98
##  8 NVDA   2025-01-14  136.  136.  130.  132. 195590500     132.        6.33
##  9 NVDA   2025-01-15  134.  136.  131.  136. 185217300     136.        5.16
## 10 NVDA   2025-01-16  139.  139.  133.  134. 209235600     134.        5.26
## # ℹ 161 more rows

Summarize with groups

stocks %>%
    group_by(symbol) %>%
    summarize(avg_vol = mean(volume, na.rm = TRUE))
## # A tibble: 4 × 2
##   symbol    avg_vol
##   <chr>       <dbl>
## 1 GOOGL   36793530.
## 2 META    14843209.
## 3 MSFT    22180974.
## 4 NVDA   237182224.