Import stock prices

stocks <- tq_get(c("TGT", "WMT", "COST"),
                 get = "stock.prices",
                 from = "2020-01-01",
                 to = "2023-01-01")
stocks
## # A tibble: 2,268 × 8
##    symbol date        open  high   low close   volume adjusted
##    <chr>  <date>     <dbl> <dbl> <dbl> <dbl>    <dbl>    <dbl>
##  1 TGT    2020-01-02  129.  129.  125.  126.  5149800     114.
##  2 TGT    2020-01-03  125.  126.  124.  125.  5018500     113.
##  3 TGT    2020-01-06  124.  125.  123.  124.  4226900     112.
##  4 TGT    2020-01-07  123   124.  123   124.  3641600     112.
##  5 TGT    2020-01-08  124.  125.  123.  123.  5731600     112.
##  6 TGT    2020-01-09  124.  125.  123.  124.  5369700     112.
##  7 TGT    2020-01-10  125.  126.  124.  125.  4678000     113.
##  8 TGT    2020-01-13  125.  125.  123.  124.  3632800     112.
##  9 TGT    2020-01-14  124.  126.  123.  125.  3291900     113.
## 10 TGT    2020-01-15  117.  119.  116.  117  26743400     106.
## # ℹ 2,258 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 >125)
## # A tibble: 1,355 × 8
##    symbol date        open  high   low close   volume adjusted
##    <chr>  <date>     <dbl> <dbl> <dbl> <dbl>    <dbl>    <dbl>
##  1 TGT    2020-08-17  138.  139.  137.  138.  4632300     126.
##  2 TGT    2020-08-18  137.  138.  135.  137.  5756800     126.
##  3 TGT    2020-08-19  148.  155.  147.  154. 40211800     142.
##  4 TGT    2020-08-20  155.  156.  152.  152. 12046000     140.
##  5 TGT    2020-08-21  152.  156.  152.  154.  7061400     141.
##  6 TGT    2020-08-24  154.  155.  153.  153.  4355300     141.
##  7 TGT    2020-08-25  154.  154.  152.  153.  2984400     140.
##  8 TGT    2020-08-26  153.  154.  152.  153.  3061600     140.
##  9 TGT    2020-08-27  153.  153.  150.  150.  3773100     138.
## 10 TGT    2020-08-28  150.  152.  150.  151.  2835600     139.
## # ℹ 1,345 more rows

Arrange rows

arrange(stocks, desc(date), desc(open))
## # A tibble: 2,268 × 8
##    symbol date        open  high   low close   volume adjusted
##    <chr>  <date>     <dbl> <dbl> <dbl> <dbl>    <dbl>    <dbl>
##  1 COST   2022-12-30 455.  457.  451.  456.   1803200    442. 
##  2 TGT    2022-12-30 147.  149.  147.  149.   2391100    142. 
##  3 WMT    2022-12-30  47.2  47.3  46.9  47.3 11505900     46.2
##  4 COST   2022-12-29 456.  459   453.  457.   1465000    442. 
##  5 TGT    2022-12-29 147.  150.  147.  148.   2829000    142. 
##  6 WMT    2022-12-29  47.4  47.7  47.2  47.4  9171900     46.4
##  7 COST   2022-12-28 458.  460.  453.  453.   1324100    438. 
##  8 TGT    2022-12-28 145.  147.  145.  146.   2623200    139. 
##  9 WMT    2022-12-28  47.8  47.9  47.0  47.1 15246300     46.1
## 10 COST   2022-12-27 464.  465.  457.  458.   1230800    444. 
## # ℹ 2,258 more rows

Select columns

select(stocks, high, low)
## # A tibble: 2,268 × 2
##     high   low
##    <dbl> <dbl>
##  1  129.  125.
##  2  126.  124.
##  3  125.  123.
##  4  124.  123 
##  5  125.  123.
##  6  125.  123.
##  7  126.  124.
##  8  125.  123.
##  9  126.  123.
## 10  119.  116.
## # ℹ 2,258 more rows
select(stocks, symbol, high, low)
## # A tibble: 2,268 × 3
##    symbol  high   low
##    <chr>  <dbl> <dbl>
##  1 TGT     129.  125.
##  2 TGT     126.  124.
##  3 TGT     125.  123.
##  4 TGT     124.  123 
##  5 TGT     125.  123.
##  6 TGT     125.  123.
##  7 TGT     126.  124.
##  8 TGT     125.  123.
##  9 TGT     126.  123.
## 10 TGT     119.  116.
## # ℹ 2,258 more rows
select(stocks, symbol:close)
## # A tibble: 2,268 × 6
##    symbol date        open  high   low close
##    <chr>  <date>     <dbl> <dbl> <dbl> <dbl>
##  1 TGT    2020-01-02  129.  129.  125.  126.
##  2 TGT    2020-01-03  125.  126.  124.  125.
##  3 TGT    2020-01-06  124.  125.  123.  124.
##  4 TGT    2020-01-07  123   124.  123   124.
##  5 TGT    2020-01-08  124.  125.  123.  123.
##  6 TGT    2020-01-09  124.  125.  123.  124.
##  7 TGT    2020-01-10  125.  126.  124.  125.
##  8 TGT    2020-01-13  125.  125.  123.  124.
##  9 TGT    2020-01-14  124.  126.  123.  125.
## 10 TGT    2020-01-15  117.  119.  116.  117 
## # ℹ 2,258 more rows

Add columns

mutate(stocks,
       gain = high - low) %>%
    select(symbol:low, gain)
## # A tibble: 2,268 × 6
##    symbol date        open  high   low  gain
##    <chr>  <date>     <dbl> <dbl> <dbl> <dbl>
##  1 TGT    2020-01-02  129.  129.  125.  3.64
##  2 TGT    2020-01-03  125.  126.  124.  1.60
##  3 TGT    2020-01-06  124.  125.  123.  1.43
##  4 TGT    2020-01-07  123   124.  123   1.43
##  5 TGT    2020-01-08  124.  125.  123.  1.91
##  6 TGT    2020-01-09  124.  125.  123.  2.25
##  7 TGT    2020-01-10  125.  126.  124.  1.65
##  8 TGT    2020-01-13  125.  125.  123.  1.75
##  9 TGT    2020-01-14  124.  126.  123.  2.22
## 10 TGT    2020-01-15  117.  119.  116.  3.84
## # ℹ 2,258 more rows
mutate(stocks,
       gain = high - low) %>%
    select(gain)
## # A tibble: 2,268 × 1
##     gain
##    <dbl>
##  1  3.64
##  2  1.60
##  3  1.43
##  4  1.43
##  5  1.91
##  6  2.25
##  7  1.65
##  8  1.75
##  9  2.22
## 10  3.84
## # ℹ 2,258 more rows
transmute(stocks,
         gain = high - low)
## # A tibble: 2,268 × 1
##     gain
##    <dbl>
##  1  3.64
##  2  1.60
##  3  1.43
##  4  1.43
##  5  1.91
##  6  2.25
##  7  1.65
##  8  1.75
##  9  2.22
## 10  3.84
## # ℹ 2,258 more rows
select(stocks, high) %>%
    
    mutate(high_lag1 = lag(high))
## # A tibble: 2,268 × 2
##     high high_lag1
##    <dbl>     <dbl>
##  1  129.       NA 
##  2  126.      129.
##  3  125.      126.
##  4  124.      125.
##  5  125.      124.
##  6  125.      125.
##  7  126.      125.
##  8  125.      126.
##  9  126.      125.
## 10  119.      126.
## # ℹ 2,258 more rows
select(stocks, low) %>%
    
    mutate(low_cumsum = cumsum(low))
## # A tibble: 2,268 × 2
##      low low_cumsum
##    <dbl>      <dbl>
##  1  125.       125.
##  2  124.       249.
##  3  123.       372.
##  4  123        495.
##  5  123.       619.
##  6  123.       741.
##  7  124.       865.
##  8  123.       988.
##  9  123.      1112.
## 10  116.      1227.
## # ℹ 2,258 more rows

Summarize with groups

stocks
## # A tibble: 2,268 × 8
##    symbol date        open  high   low close   volume adjusted
##    <chr>  <date>     <dbl> <dbl> <dbl> <dbl>    <dbl>    <dbl>
##  1 TGT    2020-01-02  129.  129.  125.  126.  5149800     114.
##  2 TGT    2020-01-03  125.  126.  124.  125.  5018500     113.
##  3 TGT    2020-01-06  124.  125.  123.  124.  4226900     112.
##  4 TGT    2020-01-07  123   124.  123   124.  3641600     112.
##  5 TGT    2020-01-08  124.  125.  123.  123.  5731600     112.
##  6 TGT    2020-01-09  124.  125.  123.  124.  5369700     112.
##  7 TGT    2020-01-10  125.  126.  124.  125.  4678000     113.
##  8 TGT    2020-01-13  125.  125.  123.  124.  3632800     112.
##  9 TGT    2020-01-14  124.  126.  123.  125.  3291900     113.
## 10 TGT    2020-01-15  117.  119.  116.  117  26743400     106.
## # ℹ 2,258 more rows
summarize(stocks, high = mean(low, na.rm = TRUE))
## # A tibble: 1 × 1
##    high
##   <dbl>
## 1  213.
stocks %>%
    group_by(symbol) %>%
    summarize(high = mean(high, na.rm = TRUE)) %>%
    arrange(high)
## # A tibble: 3 × 2
##   symbol  high
##   <chr>  <dbl>
## 1 WMT     45.9
## 2 TGT    182. 
## 3 COST   424.