Import stock prices

stocks <- tq_get(c("NVDA", "SHOP" , "TTD"),
                 get = "stock.prices",
                 from = "2023-01-01")
stocks
## # A tibble: 1,266 × 8
##    symbol date        open  high   low close    volume adjusted
##    <chr>  <date>     <dbl> <dbl> <dbl> <dbl>     <dbl>    <dbl>
##  1 NVDA   2023-01-03  14.9  15.0  14.1  14.3 401277000     14.3
##  2 NVDA   2023-01-04  14.6  14.9  14.2  14.7 431324000     14.7
##  3 NVDA   2023-01-05  14.5  14.6  14.1  14.3 389168000     14.3
##  4 NVDA   2023-01-06  14.5  15.0  14.0  14.9 405044000     14.9
##  5 NVDA   2023-01-09  15.3  16.1  15.1  15.6 504231000     15.6
##  6 NVDA   2023-01-10  15.5  16.0  15.5  15.9 384101000     15.9
##  7 NVDA   2023-01-11  15.8  16.0  15.6  16.0 353285000     16.0
##  8 NVDA   2023-01-12  16.1  16.6  15.5  16.5 551409000     16.5
##  9 NVDA   2023-01-13  16.3  16.9  16.2  16.9 447287000     16.9
## 10 NVDA   2023-01-17  16.9  17.7  16.9  17.7 511102000     17.7
## # ℹ 1,256 more rows

Plot stock prices

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

Apply the dply verbs from chapter 5

filter rows

stocks %>% filter(adjusted > 100)
## # A tibble: 93 × 8
##    symbol date        open  high   low close    volume adjusted
##    <chr>  <date>     <dbl> <dbl> <dbl> <dbl>     <dbl>    <dbl>
##  1 NVDA   2024-05-23  102.  106.  102.  104. 835065000     104.
##  2 NVDA   2024-05-24  104.  106.  103   106. 429494000     106.
##  3 NVDA   2024-05-28  110.  115.  110.  114. 652728000     114.
##  4 NVDA   2024-05-29  113.  115.  111.  115. 557442000     115.
##  5 NVDA   2024-05-30  115.  116.  110.  110. 487350000     110.
##  6 NVDA   2024-05-31  113.  113.  107.  110. 613263000     110.
##  7 NVDA   2024-06-03  114.  115   112.  115  438392000     115.
##  8 NVDA   2024-06-04  116.  117.  114.  116. 403324000     116.
##  9 NVDA   2024-06-05  118.  122.  117.  122. 528402000     122.
## 10 NVDA   2024-06-06  124.  126.  118.  121. 664696000     121.
## # ℹ 83 more rows

Arrange rows

arrange(stocks, desc(high), desc(low))
## # A tibble: 1,266 × 8
##    symbol date        open  high   low close    volume adjusted
##    <chr>  <date>     <dbl> <dbl> <dbl> <dbl>     <dbl>    <dbl>
##  1 NVDA   2024-06-20  140.  141.  130.  131. 517768400     131.
##  2 NVDA   2024-06-18  131.  136.  131.  136. 294335100     136.
##  3 NVDA   2024-07-11  136.  136.  127.  127. 374782700     127.
##  4 NVDA   2024-07-10  134.  135.  132.  135. 248978600     135.
##  5 NVDA   2024-07-09  130.  134.  129.  131. 285366600     131.
##  6 NVDA   2024-06-17  133.  134.  130.  131. 288504400     131.
##  7 NVDA   2024-06-14  130.  133.  128.  132. 309320400     132.
##  8 NVDA   2024-07-12  128.  132.  127.  129. 252680500     129.
##  9 NVDA   2024-07-15  131.  131.  127.  128. 208326200     128.
## 10 NVDA   2024-08-26  130.  131.  124.  126. 331964700     126.
## # ℹ 1,256 more rows

Select columns

select(stocks, date)
## # A tibble: 1,266 × 1
##    date      
##    <date>    
##  1 2023-01-03
##  2 2023-01-04
##  3 2023-01-05
##  4 2023-01-06
##  5 2023-01-09
##  6 2023-01-10
##  7 2023-01-11
##  8 2023-01-12
##  9 2023-01-13
## 10 2023-01-17
## # ℹ 1,256 more rows
select(stocks, date, high, low)
## # A tibble: 1,266 × 3
##    date        high   low
##    <date>     <dbl> <dbl>
##  1 2023-01-03  15.0  14.1
##  2 2023-01-04  14.9  14.2
##  3 2023-01-05  14.6  14.1
##  4 2023-01-06  15.0  14.0
##  5 2023-01-09  16.1  15.1
##  6 2023-01-10  16.0  15.5
##  7 2023-01-11  16.0  15.6
##  8 2023-01-12  16.6  15.5
##  9 2023-01-13  16.9  16.2
## 10 2023-01-17  17.7  16.9
## # ℹ 1,256 more rows
select(stocks, date, open, close)
## # A tibble: 1,266 × 3
##    date        open close
##    <date>     <dbl> <dbl>
##  1 2023-01-03  14.9  14.3
##  2 2023-01-04  14.6  14.7
##  3 2023-01-05  14.5  14.3
##  4 2023-01-06  14.5  14.9
##  5 2023-01-09  15.3  15.6
##  6 2023-01-10  15.5  15.9
##  7 2023-01-11  15.8  16.0
##  8 2023-01-12  16.1  16.5
##  9 2023-01-13  16.3  16.9
## 10 2023-01-17  16.9  17.7
## # ℹ 1,256 more rows

Add columns

mutate(stocks,
       gain = close - open) %>%
    
    # Select days gain
    select(gain)
## # A tibble: 1,266 × 1
##      gain
##     <dbl>
##  1 -0.536
##  2  0.182
##  3 -0.226
##  4  0.385
##  5  0.344
##  6  0.402
##  7  0.161
##  8  0.411
##  9  0.621
## 10  0.803
## # ℹ 1,256 more rows

Summarize with groups

stocks %>%
    
    # Group by symbol
    group_by(symbol) %>%
    
    # Calculate average close price
    summarise(close = mean(close, na.rm = TRUE)) %>%
    
    # Sort it
    arrange(close)
## # A tibble: 3 × 2
##   symbol close
##   <chr>  <dbl>
## 1 NVDA    60.7
## 2 SHOP    62.3
## 3 TTD     76.3