Import stock prices

stocks <- tq_get(c("X", "CMC", "ZEUS"),
                 get = "stock.prices",
                 from = "2024-01-01")
stocks
## # A tibble: 522 × 8
##    symbol date        open  high   low close  volume adjusted
##    <chr>  <date>     <dbl> <dbl> <dbl> <dbl>   <dbl>    <dbl>
##  1 X      2024-01-02  48.5  48.6  47.9  48.0 6317700     47.8
##  2 X      2024-01-03  47.7  48.5  47.6  47.8 7197400     47.7
##  3 X      2024-01-04  48.1  48.3  47.8  47.9 6405100     47.7
##  4 X      2024-01-05  48.0  48.4  47.8  48.3 4029000     48.2
##  5 X      2024-01-08  48.2  48.7  48.2  48.5 3219900     48.3
##  6 X      2024-01-09  48.4  48.7  48.3  48.4 7234500     48.2
##  7 X      2024-01-10  48.3  48.5  48.2  48.3 3399000     48.1
##  8 X      2024-01-11  48.2  48.4  46.5  47.7 7808800     47.6
##  9 X      2024-01-12  47.9  48    47.3  47.4 4210300     47.2
## 10 X      2024-01-16  47.4  47.6  47.0  47.2 3078600     47.1
## # ℹ 512 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

filter(stocks,  high < 50)
## # A tibble: 238 × 8
##    symbol date        open  high   low close  volume adjusted
##    <chr>  <date>     <dbl> <dbl> <dbl> <dbl>   <dbl>    <dbl>
##  1 X      2024-01-02  48.5  48.6  47.9  48.0 6317700     47.8
##  2 X      2024-01-03  47.7  48.5  47.6  47.8 7197400     47.7
##  3 X      2024-01-04  48.1  48.3  47.8  47.9 6405100     47.7
##  4 X      2024-01-05  48.0  48.4  47.8  48.3 4029000     48.2
##  5 X      2024-01-08  48.2  48.7  48.2  48.5 3219900     48.3
##  6 X      2024-01-09  48.4  48.7  48.3  48.4 7234500     48.2
##  7 X      2024-01-10  48.3  48.5  48.2  48.3 3399000     48.1
##  8 X      2024-01-11  48.2  48.4  46.5  47.7 7808800     47.6
##  9 X      2024-01-12  47.9  48    47.3  47.4 4210300     47.2
## 10 X      2024-01-16  47.4  47.6  47.0  47.2 3078600     47.1
## # ℹ 228 more rows
    filter(stocks, low < 50 )
## # A tibble: 263 × 8
##    symbol date        open  high   low close  volume adjusted
##    <chr>  <date>     <dbl> <dbl> <dbl> <dbl>   <dbl>    <dbl>
##  1 X      2024-01-02  48.5  48.6  47.9  48.0 6317700     47.8
##  2 X      2024-01-03  47.7  48.5  47.6  47.8 7197400     47.7
##  3 X      2024-01-04  48.1  48.3  47.8  47.9 6405100     47.7
##  4 X      2024-01-05  48.0  48.4  47.8  48.3 4029000     48.2
##  5 X      2024-01-08  48.2  48.7  48.2  48.5 3219900     48.3
##  6 X      2024-01-09  48.4  48.7  48.3  48.4 7234500     48.2
##  7 X      2024-01-10  48.3  48.5  48.2  48.3 3399000     48.1
##  8 X      2024-01-11  48.2  48.4  46.5  47.7 7808800     47.6
##  9 X      2024-01-12  47.9  48    47.3  47.4 4210300     47.2
## 10 X      2024-01-16  47.4  47.6  47.0  47.2 3078600     47.1
## # ℹ 253 more rows

Arrange rows

stocks %>% 
    arrange(symbol, high, adjusted)
## # A tibble: 522 × 8
##    symbol date        open  high   low close  volume adjusted
##    <chr>  <date>     <dbl> <dbl> <dbl> <dbl>   <dbl>    <dbl>
##  1 CMC    2024-01-05  48.0  48.8  47.8  48.2 1240800     47.8
##  2 CMC    2024-01-04  49.2  49.2  48.2  48.3 1050300     47.8
##  3 CMC    2024-09-10  49.3  49.5  48.4  49.1  711700     49.1
##  4 CMC    2024-01-10  49.1  49.7  49.0  49.4 1601500     48.9
##  5 CMC    2024-01-03  49.6  49.8  48.9  48.9 1087100     48.5
##  6 CMC    2024-01-17  48.8  50.3  48.7  50.1  950300     49.8
##  7 CMC    2024-01-16  50.0  50.3  49.7  49.8 1246400     49.3
##  8 CMC    2024-09-09  50.2  50.5  49.3  49.3  668700     49.3
##  9 CMC    2024-01-19  50.3  50.5  49.0  49.9 1200500     49.6
## 10 CMC    2024-06-14  50.5  50.5  49.8  50.4  738700     50.2
## # ℹ 512 more rows

Select columns

stocks %>%
    select(date, symbol, high, low)
## # A tibble: 522 × 4
##    date       symbol  high   low
##    <date>     <chr>  <dbl> <dbl>
##  1 2024-01-02 X       48.6  47.9
##  2 2024-01-03 X       48.5  47.6
##  3 2024-01-04 X       48.3  47.8
##  4 2024-01-05 X       48.4  47.8
##  5 2024-01-08 X       48.7  48.2
##  6 2024-01-09 X       48.7  48.3
##  7 2024-01-10 X       48.5  48.2
##  8 2024-01-11 X       48.4  46.5
##  9 2024-01-12 X       48    47.3
## 10 2024-01-16 X       47.6  47.0
## # ℹ 512 more rows

Add columns

mutate(stocks,
       day_change = open - close)
## # A tibble: 522 × 9
##    symbol date        open  high   low close  volume adjusted day_change
##    <chr>  <date>     <dbl> <dbl> <dbl> <dbl>   <dbl>    <dbl>      <dbl>
##  1 X      2024-01-02  48.5  48.6  47.9  48.0 6317700     47.8     0.540 
##  2 X      2024-01-03  47.7  48.5  47.6  47.8 7197400     47.7    -0.150 
##  3 X      2024-01-04  48.1  48.3  47.8  47.9 6405100     47.7     0.160 
##  4 X      2024-01-05  48.0  48.4  47.8  48.3 4029000     48.2    -0.400 
##  5 X      2024-01-08  48.2  48.7  48.2  48.5 3219900     48.3    -0.290 
##  6 X      2024-01-09  48.4  48.7  48.3  48.4 7234500     48.2    -0.0100
##  7 X      2024-01-10  48.3  48.5  48.2  48.3 3399000     48.1     0.0200
##  8 X      2024-01-11  48.2  48.4  46.5  47.7 7808800     47.6     0.420 
##  9 X      2024-01-12  47.9  48    47.3  47.4 4210300     47.2     0.480 
## 10 X      2024-01-16  47.4  47.6  47.0  47.2 3078600     47.1     0.190 
## # ℹ 512 more rows

Summarize with groups

summarise(stocks, avg_price = mean(close, na.rm =TRUE))
## # A tibble: 1 × 1
##   avg_price
##       <dbl>
## 1      50.5
# average price per stock

stocks %>%
    
    group_by(symbol) %>%
    
    summarise(avg_price = mean(close))
## # A tibble: 3 × 2
##   symbol avg_price
##   <chr>      <dbl>
## 1 CMC         54.2
## 2 X           40.9
## 3 ZEUS        56.5