Import stock prices

stocks <- tq_get(c("UAL", "AAL", "LUV"),
                 get = "stock.prices",
                 from = "2024-01-01")
stocks
## # A tibble: 1,038 × 8
##    symbol date        open  high   low close   volume adjusted
##    <chr>  <date>     <dbl> <dbl> <dbl> <dbl>    <dbl>    <dbl>
##  1 UAL    2024-01-02  41.1  41.7  40.6  40.7  6331300     40.7
##  2 UAL    2024-01-03  40.1  40.6  39.4  39.5  9730300     39.5
##  3 UAL    2024-01-04  39.7  40.9  39.6  40.5  6913800     40.5
##  4 UAL    2024-01-05  40.4  42.0  40.3  41.8  7193900     41.8
##  5 UAL    2024-01-08  41.5  43.5  41.4  42.9 13003800     42.9
##  6 UAL    2024-01-09  43.5  44.2  43.1  43.5  9334300     43.5
##  7 UAL    2024-01-10  43.7  44.5  43.4  44.3  8337500     44.3
##  8 UAL    2024-01-11  44.1  44.5  43.4  44.5  6750300     44.5
##  9 UAL    2024-01-12  42.6  42.6  39.8  39.8 26539200     39.8
## 10 UAL    2024-01-16  39.3  39.4  38.1  38.9 13383500     38.9
## # ℹ 1,028 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(adjusted > 24)
## # A tibble: 689 × 8
##    symbol date        open  high   low close   volume adjusted
##    <chr>  <date>     <dbl> <dbl> <dbl> <dbl>    <dbl>    <dbl>
##  1 UAL    2024-01-02  41.1  41.7  40.6  40.7  6331300     40.7
##  2 UAL    2024-01-03  40.1  40.6  39.4  39.5  9730300     39.5
##  3 UAL    2024-01-04  39.7  40.9  39.6  40.5  6913800     40.5
##  4 UAL    2024-01-05  40.4  42.0  40.3  41.8  7193900     41.8
##  5 UAL    2024-01-08  41.5  43.5  41.4  42.9 13003800     42.9
##  6 UAL    2024-01-09  43.5  44.2  43.1  43.5  9334300     43.5
##  7 UAL    2024-01-10  43.7  44.5  43.4  44.3  8337500     44.3
##  8 UAL    2024-01-11  44.1  44.5  43.4  44.5  6750300     44.5
##  9 UAL    2024-01-12  42.6  42.6  39.8  39.8 26539200     39.8
## 10 UAL    2024-01-16  39.3  39.4  38.1  38.9 13383500     38.9
## # ℹ 679 more rows
stocks %>% filter(open > 43, close > 40)
## # A tibble: 287 × 8
##    symbol date        open  high   low close  volume adjusted
##    <chr>  <date>     <dbl> <dbl> <dbl> <dbl>   <dbl>    <dbl>
##  1 UAL    2024-01-09  43.5  44.2  43.1  43.5 9334300     43.5
##  2 UAL    2024-01-10  43.7  44.5  43.4  44.3 8337500     44.3
##  3 UAL    2024-01-11  44.1  44.5  43.4  44.5 6750300     44.5
##  4 UAL    2024-02-15  43.3  43.7  42.6  42.8 6694600     42.8
##  5 UAL    2024-02-21  43.1  44.1  42.9  44.0 9333300     44.0
##  6 UAL    2024-02-22  44.5  45.9  44.4  45.3 9335800     45.3
##  7 UAL    2024-02-23  45.1  45.8  45.0  45.5 6576100     45.5
##  8 UAL    2024-02-26  45.5  46.2  45.0  45.0 6694500     45.0
##  9 UAL    2024-02-27  45.4  45.5  44.5  44.9 6902900     44.9
## 10 UAL    2024-02-28  44.4  45.1  44.4  44.8 6146200     44.8
## # ℹ 277 more rows
stocks %>% filter(date > "2025-01-01")
## # A tibble: 282 × 8
##    symbol date        open  high   low close   volume adjusted
##    <chr>  <date>     <dbl> <dbl> <dbl> <dbl>    <dbl>    <dbl>
##  1 UAL    2025-01-02  97.3  97.9  94.4  95.4  3429200     95.4
##  2 UAL    2025-01-03  95.4  95.7  91.8  95.7  4154500     95.7
##  3 UAL    2025-01-06  96.9 101.   96.4  98.6  7051000     98.6
##  4 UAL    2025-01-07  99   102.   98.1 101.   4995400    101. 
##  5 UAL    2025-01-08 100.  104.   99.4 104.   5458200    104. 
##  6 UAL    2025-01-10 109.  111.  106.  107.  14330600    107. 
##  7 UAL    2025-01-13 104.  105.  102.  105.   5859000    105. 
##  8 UAL    2025-01-14 107.  108.  106.  108.   5973100    108. 
##  9 UAL    2025-01-15 109.  110.  105.  105.   4721200    105. 
## 10 UAL    2025-01-16 105.  107.  104.  106.   4381700    106. 
## # ℹ 272 more rows

Arrange rows

arrange(stocks, desc(date))
## # A tibble: 1,038 × 8
##    symbol date        open  high   low close   volume adjusted
##    <chr>  <date>     <dbl> <dbl> <dbl> <dbl>    <dbl>    <dbl>
##  1 UAL    2025-05-19  77.9  79.6  76.7  78.6  6223500     78.6
##  2 AAL    2025-05-19  11.7  11.9  11.5  11.9 43321600     11.9
##  3 LUV    2025-05-19  32.4  32.9  32.0  32.6 10637900     32.6
##  4 UAL    2025-05-16  76.8  78.6  75.7  77.9  6423700     77.9
##  5 AAL    2025-05-16  11.8  12.0  11.7  11.9 47091000     11.9
##  6 LUV    2025-05-16  32.0  32.8  31.8  32.7 10105500     32.7
##  7 UAL    2025-05-15  78.9  79.1  76.1  76.5  9180500     76.5
##  8 AAL    2025-05-15  11.9  11.9  11.5  11.8 55977300     11.8
##  9 LUV    2025-05-15  31.5  32.0  31.3  31.9  8258800     31.9
## 10 UAL    2025-05-14  82.6  84.2  78.9  79.0  8704100     79.0
## # ℹ 1,028 more rows

Select columns

select(stocks, symbol, date, open, close)
## # A tibble: 1,038 × 4
##    symbol date        open close
##    <chr>  <date>     <dbl> <dbl>
##  1 UAL    2024-01-02  41.1  40.7
##  2 UAL    2024-01-03  40.1  39.5
##  3 UAL    2024-01-04  39.7  40.5
##  4 UAL    2024-01-05  40.4  41.8
##  5 UAL    2024-01-08  41.5  42.9
##  6 UAL    2024-01-09  43.5  43.5
##  7 UAL    2024-01-10  43.7  44.3
##  8 UAL    2024-01-11  44.1  44.5
##  9 UAL    2024-01-12  42.6  39.8
## 10 UAL    2024-01-16  39.3  38.9
## # ℹ 1,028 more rows

Add columns

transmute(stocks,
          change = close - open)
## # A tibble: 1,038 × 1
##     change
##      <dbl>
##  1 -0.410 
##  2 -0.530 
##  3  0.760 
##  4  1.35  
##  5  1.44  
##  6  0.0100
##  7  0.580 
##  8  0.450 
##  9 -2.79  
## 10 -0.360 
## # ℹ 1,028 more rows

Summarize with groups

stocks %>%

group_by(symbol) %>%

summarise(avg_change = mean(open - close, na.rm = TRUE)) %>%
    
arrange(avg_change)
## # A tibble: 3 × 2
##   symbol avg_change
##   <chr>       <dbl>
## 1 UAL      -0.0367 
## 2 LUV      -0.00731
## 3 AAL       0.0126