Import stock prices

stocks <- tq_get(c("AMD", "VOO", "IJR", "NVDA"),
                 get = "stock.prices",
                 from = "2020-01-01")
stocks
## # A tibble: 6,736 × 8
##    symbol date        open  high   low close   volume adjusted
##    <chr>  <date>     <dbl> <dbl> <dbl> <dbl>    <dbl>    <dbl>
##  1 AMD    2020-01-02  46.9  49.2  46.6  49.1 80331100     49.1
##  2 AMD    2020-01-03  48.0  49.4  47.5  48.6 73127400     48.6
##  3 AMD    2020-01-06  48.0  48.9  47.9  48.4 47934900     48.4
##  4 AMD    2020-01-07  49.3  49.4  48.0  48.2 58061400     48.2
##  5 AMD    2020-01-08  47.8  48.3  47.1  47.8 53767000     47.8
##  6 AMD    2020-01-09  48.9  50.0  48.4  49.0 76512800     49.0
##  7 AMD    2020-01-10  49.3  49.3  48    48.2 44133700     48.2
##  8 AMD    2020-01-13  48.7  48.9  48.2  48.8 34266800     48.8
##  9 AMD    2020-01-14  48.6  49.0  47.9  48.2 38563200     48.2
## 10 AMD    2020-01-15  48.2  49.1  48.1  48.5 40199900     48.5
## # ℹ 6,726 more rows

Plot stock prices

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

Apply the dplyr verbs learned in chapter 5

Filter Rows

stocks %>% filter(close > 200)
## # A tibble: 2,006 × 8
##    symbol date        open  high   low close    volume adjusted
##    <chr>  <date>     <dbl> <dbl> <dbl> <dbl>     <dbl>    <dbl>
##  1 AMD    2024-03-01  198.  203.  195.  203. 103820800     203.
##  2 AMD    2024-03-04  205.  211.  204.  205.  86835300     205.
##  3 AMD    2024-03-05  200.  205.  199.  205.  65407100     205.
##  4 AMD    2024-03-06  210.  215.  207.  211.  86687000     211.
##  5 AMD    2024-03-07  213.  214.  208.  211.  63869000     211.
##  6 AMD    2024-03-08  213.  227.  206.  207. 120815200     207.
##  7 AMD    2024-03-12  201.  203.  194.  203.  68951700     203.
##  8 AMD    2025-10-06  226.  227.  203.  204. 248859600     204.
##  9 AMD    2025-10-07  215.  219.  209.  212. 115748100     212.
## 10 AMD    2025-10-08  213.  236.  211.  236. 159983500     236.
## # ℹ 1,996 more rows

Arrange Rows

# arrange by highest adjusted price
stocks %>% arrange(desc(adjusted))
## # A tibble: 6,736 × 8
##    symbol date        open  high   low close  volume adjusted
##    <chr>  <date>     <dbl> <dbl> <dbl> <dbl>   <dbl>    <dbl>
##  1 VOO    2026-08-13  712.  716.  712.  715. 4590000     715.
##  2 VOO    2026-08-14  716.  716.  713.  714. 4236400     714.
##  3 VOO    2026-09-03  706.  712.  706.  711. 8585400     711.
##  4 VOO    2026-08-07  709.  711.  707.  711. 4653100     711.
##  5 VOO    2026-08-10  710.  712.  710.  711. 6689300     711.
##  6 VOO    2026-08-17  714.  714.  710.  710. 5745000     710.
##  7 VOO    2026-08-12  712.  712.  709.  710. 4919100     710.
##  8 VOO    2026-08-04  699.  711.  699.  709. 6566400     709.
##  9 VOO    2026-08-27  706.  710.  705.  709. 6745700     709.
## 10 VOO    2026-08-11  712.  712   707   708. 5169300     708.
## # ℹ 6,726 more rows
# arrange by date
stocks %>% arrange(desc(date))
## # A tibble: 6,736 × 8
##    symbol date        open  high   low close    volume adjusted
##    <chr>  <date>     <dbl> <dbl> <dbl> <dbl>     <dbl>    <dbl>
##  1 AMD    2026-09-15  502.  514.  498.  504.  17134000     504.
##  2 VOO    2026-09-15  699.  699.  695.  696.   9657900     696.
##  3 IJR    2026-09-15  141.  141.  140.  140.   3160000     140.
##  4 NVDA   2026-09-15  213.  214.  211.  212.  88059700     212.
##  5 AMD    2026-09-14  486.  498.  480.  493.  24810100     493.
##  6 VOO    2026-09-14  698.  702.  697.  699.   6801300     699.
##  7 IJR    2026-09-14  141.  142.  141.  141.   2826800     141.
##  8 NVDA   2026-09-14  211.  213.  209.  211. 132267200     211.
##  9 AMD    2026-09-11  511.  521.  501.  516.  19026200     516.
## 10 VOO    2026-09-11  703   704.  702.  703.   5792000     703.
## # ℹ 6,726 more rows

Select Columns

stocks %>% select(symbol, date, adjusted)
## # A tibble: 6,736 × 3
##    symbol date       adjusted
##    <chr>  <date>        <dbl>
##  1 AMD    2020-01-02     49.1
##  2 AMD    2020-01-03     48.6
##  3 AMD    2020-01-06     48.4
##  4 AMD    2020-01-07     48.2
##  5 AMD    2020-01-08     47.8
##  6 AMD    2020-01-09     49.0
##  7 AMD    2020-01-10     48.2
##  8 AMD    2020-01-13     48.8
##  9 AMD    2020-01-14     48.2
## 10 AMD    2020-01-15     48.5
## # ℹ 6,726 more rows

Add Columns

stocks %>% mutate(price_movement = close - open) %>%
    select(symbol, date, open, close, price_movement, adjusted)
## # A tibble: 6,736 × 6
##    symbol date        open close price_movement adjusted
##    <chr>  <date>     <dbl> <dbl>          <dbl>    <dbl>
##  1 AMD    2020-01-02  46.9  49.1         2.24       49.1
##  2 AMD    2020-01-03  48.0  48.6         0.570      48.6
##  3 AMD    2020-01-06  48.0  48.4         0.370      48.4
##  4 AMD    2020-01-07  49.3  48.2        -1.10       48.2
##  5 AMD    2020-01-08  47.8  47.8        -0.0200     47.8
##  6 AMD    2020-01-09  48.9  49.0         0.0300     49.0
##  7 AMD    2020-01-10  49.3  48.2        -1.09       48.2
##  8 AMD    2020-01-13  48.7  48.8         0.0900     48.8
##  9 AMD    2020-01-14  48.6  48.2        -0.430      48.2
## 10 AMD    2020-01-15  48.2  48.5         0.320      48.5
## # ℹ 6,726 more rows

Summarize with groups

stocks %>%
    group_by(symbol) %>%
    summarise( avg_price = mean(adjusted))
## # A tibble: 4 × 2
##   symbol avg_price
##   <chr>      <dbl>
## 1 AMD        139. 
## 2 IJR         99.5
## 3 NVDA        72.3
## 4 VOO        429.