Import stock prices

stocks <- tq_get(c("WMT", "TGT"),
                 get = "stock.prices",
                 from = "2025-01-01",
                 to = "2026-01-01")
stocks
## # A tibble: 500 × 8
##    symbol date        open  high   low close   volume adjusted
##    <chr>  <date>     <dbl> <dbl> <dbl> <dbl>    <dbl>    <dbl>
##  1 WMT    2025-01-02  90.0  90.6  89.5  90   14820400     88.6
##  2 WMT    2025-01-03  90.2  91.3  90.1  90.8 10834600     89.4
##  3 WMT    2025-01-06  90.8  92.5  90.7  91.4 14519900     90.0
##  4 WMT    2025-01-07  91.7  91.9  90.4  90.8 11238000     89.4
##  5 WMT    2025-01-08  91.1  91.8  90.8  91.8 13453600     90.4
##  6 WMT    2025-01-10  92.5  93.6  92.2  93   18140900     91.5
##  7 WMT    2025-01-13  92.1  92.4  91.1  91.5 18617100     90.1
##  8 WMT    2025-01-14  91.9  92.0  90.6  90.8 13549200     89.4
##  9 WMT    2025-01-15  91.1  91.7  90.8  91.3 17348200     89.9
## 10 WMT    2025-01-16  91.5  91.7  90.1  91.3 13267700     89.9
## # ℹ 490 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(symbol=="WMT",adjusted > 24)
## # A tibble: 250 × 8
##    symbol date        open  high   low close   volume adjusted
##    <chr>  <date>     <dbl> <dbl> <dbl> <dbl>    <dbl>    <dbl>
##  1 WMT    2025-01-02  90.0  90.6  89.5  90   14820400     88.6
##  2 WMT    2025-01-03  90.2  91.3  90.1  90.8 10834600     89.4
##  3 WMT    2025-01-06  90.8  92.5  90.7  91.4 14519900     90.0
##  4 WMT    2025-01-07  91.7  91.9  90.4  90.8 11238000     89.4
##  5 WMT    2025-01-08  91.1  91.8  90.8  91.8 13453600     90.4
##  6 WMT    2025-01-10  92.5  93.6  92.2  93   18140900     91.5
##  7 WMT    2025-01-13  92.1  92.4  91.1  91.5 18617100     90.1
##  8 WMT    2025-01-14  91.9  92.0  90.6  90.8 13549200     89.4
##  9 WMT    2025-01-15  91.1  91.7  90.8  91.3 17348200     89.9
## 10 WMT    2025-01-16  91.5  91.7  90.1  91.3 13267700     89.9
## # ℹ 240 more rows
stocks %>% filter(symbol=="WMT"& adjusted > 24)
## # A tibble: 250 × 8
##    symbol date        open  high   low close   volume adjusted
##    <chr>  <date>     <dbl> <dbl> <dbl> <dbl>    <dbl>    <dbl>
##  1 WMT    2025-01-02  90.0  90.6  89.5  90   14820400     88.6
##  2 WMT    2025-01-03  90.2  91.3  90.1  90.8 10834600     89.4
##  3 WMT    2025-01-06  90.8  92.5  90.7  91.4 14519900     90.0
##  4 WMT    2025-01-07  91.7  91.9  90.4  90.8 11238000     89.4
##  5 WMT    2025-01-08  91.1  91.8  90.8  91.8 13453600     90.4
##  6 WMT    2025-01-10  92.5  93.6  92.2  93   18140900     91.5
##  7 WMT    2025-01-13  92.1  92.4  91.1  91.5 18617100     90.1
##  8 WMT    2025-01-14  91.9  92.0  90.6  90.8 13549200     89.4
##  9 WMT    2025-01-15  91.1  91.7  90.8  91.3 17348200     89.9
## 10 WMT    2025-01-16  91.5  91.7  90.1  91.3 13267700     89.9
## # ℹ 240 more rows
stocks %>% filter(symbol=="WMT"|symbol=="TGT")
## # A tibble: 500 × 8
##    symbol date        open  high   low close   volume adjusted
##    <chr>  <date>     <dbl> <dbl> <dbl> <dbl>    <dbl>    <dbl>
##  1 WMT    2025-01-02  90.0  90.6  89.5  90   14820400     88.6
##  2 WMT    2025-01-03  90.2  91.3  90.1  90.8 10834600     89.4
##  3 WMT    2025-01-06  90.8  92.5  90.7  91.4 14519900     90.0
##  4 WMT    2025-01-07  91.7  91.9  90.4  90.8 11238000     89.4
##  5 WMT    2025-01-08  91.1  91.8  90.8  91.8 13453600     90.4
##  6 WMT    2025-01-10  92.5  93.6  92.2  93   18140900     91.5
##  7 WMT    2025-01-13  92.1  92.4  91.1  91.5 18617100     90.1
##  8 WMT    2025-01-14  91.9  92.0  90.6  90.8 13549200     89.4
##  9 WMT    2025-01-15  91.1  91.7  90.8  91.3 17348200     89.9
## 10 WMT    2025-01-16  91.5  91.7  90.1  91.3 13267700     89.9
## # ℹ 490 more rows
stocks %>% filter(symbol%in% c("WMT","TGT"))
## # A tibble: 500 × 8
##    symbol date        open  high   low close   volume adjusted
##    <chr>  <date>     <dbl> <dbl> <dbl> <dbl>    <dbl>    <dbl>
##  1 WMT    2025-01-02  90.0  90.6  89.5  90   14820400     88.6
##  2 WMT    2025-01-03  90.2  91.3  90.1  90.8 10834600     89.4
##  3 WMT    2025-01-06  90.8  92.5  90.7  91.4 14519900     90.0
##  4 WMT    2025-01-07  91.7  91.9  90.4  90.8 11238000     89.4
##  5 WMT    2025-01-08  91.1  91.8  90.8  91.8 13453600     90.4
##  6 WMT    2025-01-10  92.5  93.6  92.2  93   18140900     91.5
##  7 WMT    2025-01-13  92.1  92.4  91.1  91.5 18617100     90.1
##  8 WMT    2025-01-14  91.9  92.0  90.6  90.8 13549200     89.4
##  9 WMT    2025-01-15  91.1  91.7  90.8  91.3 17348200     89.9
## 10 WMT    2025-01-16  91.5  91.7  90.1  91.3 13267700     89.9
## # ℹ 490 more rows

Arrange rows

stocks %>% arrange(adjusted)
## # A tibble: 500 × 8
##    symbol date        open  high   low close   volume adjusted
##    <chr>  <date>     <dbl> <dbl> <dbl> <dbl>    <dbl>    <dbl>
##  1 WMT    2025-04-08  85.8  87.0  81.0  81.8 34351700     80.7
##  2 TGT    2025-11-20  86.2  86.9  83.4  83.7 12051800     81.4
##  3 WMT    2025-04-04  85.6  87.4  82.7  83.2 36209000     82.1
##  4 TGT    2025-10-10  89.2  89.2  85.4  85.5 13925200     82.2
##  5 TGT    2025-11-24  87.6  88.0  84.5  84.5  9227300     82.3
##  6 WMT    2025-04-07  80.2  86.3  79.8  83.8 36884900     82.7
##  7 WMT    2025-03-13  84.9  85.4  83.9  84.5 31507800     83.2
##  8 TGT    2025-09-22  88.0  88.1  86.3  86.6 12449500     83.2
##  9 TGT    2025-04-08  96.5  97.5  87.3  88.8 13408900     83.4
## 10 WMT    2025-03-25  86.8  87.3  84.6  84.8 27908600     83.7
## # ℹ 490 more rows
stocks %>% arrange(desc(adjusted))
## # A tibble: 500 × 8
##    symbol date        open  high   low close  volume adjusted
##    <chr>  <date>     <dbl> <dbl> <dbl> <dbl>   <dbl>    <dbl>
##  1 TGT    2025-01-27  138.  143.  137.  142. 5331600     133.
##  2 TGT    2025-01-10  139.  143   138.  142. 5882800     132.
##  3 TGT    2025-01-28  143   145.  141.  141. 4141500     131.
##  4 TGT    2025-01-30  141.  142.  139.  140. 2792000     131.
##  5 TGT    2025-01-29  141.  142.  140.  140. 3279200     131.
##  6 TGT    2025-01-06  137.  140.  137.  139. 4937900     130.
##  7 TGT    2025-01-07  140.  142.  138.  139. 4166100     130.
##  8 TGT    2025-01-13  141.  141.  138.  139. 4061900     129.
##  9 TGT    2025-01-08  139   139.  136.  138. 4663400     129.
## 10 TGT    2025-01-31  140.  140.  137.  138. 4056400     129.
## # ℹ 490 more rows
arrange(stocks, desc(symbol), desc(date))
## # A tibble: 500 × 8
##    symbol date        open  high   low close   volume adjusted
##    <chr>  <date>     <dbl> <dbl> <dbl> <dbl>    <dbl>    <dbl>
##  1 WMT    2025-12-31  112.  112.  111.  111. 11487400     111.
##  2 WMT    2025-12-30  112.  113.  112.  112. 11730600     111.
##  3 WMT    2025-12-29  112.  113.  112.  113. 12979600     112.
##  4 WMT    2025-12-26  112.  112.  111.  112.  9003800     111.
##  5 WMT    2025-12-24  111.  112.  111.  112.  9009600     111.
##  6 WMT    2025-12-23  112.  112.  111.  111. 20319900     110.
##  7 WMT    2025-12-22  114.  114.  112.  113. 21473900     112.
##  8 WMT    2025-12-19  115.  115.  114.  114. 50043800     114.
##  9 WMT    2025-12-18  115.  116.  115.  115. 21476700     114.
## 10 WMT    2025-12-17  115.  116.  115.  116. 16177800     115.
## # ℹ 490 more rows

Select Columns

select(stocks, date, symbol)
## # A tibble: 500 × 2
##    date       symbol
##    <date>     <chr> 
##  1 2025-01-02 WMT   
##  2 2025-01-03 WMT   
##  3 2025-01-06 WMT   
##  4 2025-01-07 WMT   
##  5 2025-01-08 WMT   
##  6 2025-01-10 WMT   
##  7 2025-01-13 WMT   
##  8 2025-01-14 WMT   
##  9 2025-01-15 WMT   
## 10 2025-01-16 WMT   
## # ℹ 490 more rows
select(stocks, date, symbol, open, close)
## # A tibble: 500 × 4
##    date       symbol  open close
##    <date>     <chr>  <dbl> <dbl>
##  1 2025-01-02 WMT     90.0  90  
##  2 2025-01-03 WMT     90.2  90.8
##  3 2025-01-06 WMT     90.8  91.4
##  4 2025-01-07 WMT     91.7  90.8
##  5 2025-01-08 WMT     91.1  91.8
##  6 2025-01-10 WMT     92.5  93  
##  7 2025-01-13 WMT     92.1  91.5
##  8 2025-01-14 WMT     91.9  90.8
##  9 2025-01-15 WMT     91.1  91.3
## 10 2025-01-16 WMT     91.5  91.3
## # ℹ 490 more rows
select(stocks, date, symbol, open, close, adjusted)
## # A tibble: 500 × 5
##    date       symbol  open close adjusted
##    <date>     <chr>  <dbl> <dbl>    <dbl>
##  1 2025-01-02 WMT     90.0  90       88.6
##  2 2025-01-03 WMT     90.2  90.8     89.4
##  3 2025-01-06 WMT     90.8  91.4     90.0
##  4 2025-01-07 WMT     91.7  90.8     89.4
##  5 2025-01-08 WMT     91.1  91.8     90.4
##  6 2025-01-10 WMT     92.5  93       91.5
##  7 2025-01-13 WMT     92.1  91.5     90.1
##  8 2025-01-14 WMT     91.9  90.8     89.4
##  9 2025-01-15 WMT     91.1  91.3     89.9
## 10 2025-01-16 WMT     91.5  91.3     89.9
## # ℹ 490 more rows
select(stocks, date, symbol, starts_with ("a"))
## # A tibble: 500 × 3
##    date       symbol adjusted
##    <date>     <chr>     <dbl>
##  1 2025-01-02 WMT        88.6
##  2 2025-01-03 WMT        89.4
##  3 2025-01-06 WMT        90.0
##  4 2025-01-07 WMT        89.4
##  5 2025-01-08 WMT        90.4
##  6 2025-01-10 WMT        91.5
##  7 2025-01-13 WMT        90.1
##  8 2025-01-14 WMT        89.4
##  9 2025-01-15 WMT        89.9
## 10 2025-01-16 WMT        89.9
## # ℹ 490 more rows
select(stocks, date, symbol, contains("price"))
## # A tibble: 500 × 2
##    date       symbol
##    <date>     <chr> 
##  1 2025-01-02 WMT   
##  2 2025-01-03 WMT   
##  3 2025-01-06 WMT   
##  4 2025-01-07 WMT   
##  5 2025-01-08 WMT   
##  6 2025-01-10 WMT   
##  7 2025-01-13 WMT   
##  8 2025-01-14 WMT   
##  9 2025-01-15 WMT   
## 10 2025-01-16 WMT   
## # ℹ 490 more rows
select(stocks, date, symbol, ends_with("ed"))
## # A tibble: 500 × 3
##    date       symbol adjusted
##    <date>     <chr>     <dbl>
##  1 2025-01-02 WMT        88.6
##  2 2025-01-03 WMT        89.4
##  3 2025-01-06 WMT        90.0
##  4 2025-01-07 WMT        89.4
##  5 2025-01-08 WMT        90.4
##  6 2025-01-10 WMT        91.5
##  7 2025-01-13 WMT        90.1
##  8 2025-01-14 WMT        89.4
##  9 2025-01-15 WMT        89.9
## 10 2025-01-16 WMT        89.9
## # ℹ 490 more rows
select(stocks, date, symbol, everything())
## # A tibble: 500 × 8
##    date       symbol  open  high   low close   volume adjusted
##    <date>     <chr>  <dbl> <dbl> <dbl> <dbl>    <dbl>    <dbl>
##  1 2025-01-02 WMT     90.0  90.6  89.5  90   14820400     88.6
##  2 2025-01-03 WMT     90.2  91.3  90.1  90.8 10834600     89.4
##  3 2025-01-06 WMT     90.8  92.5  90.7  91.4 14519900     90.0
##  4 2025-01-07 WMT     91.7  91.9  90.4  90.8 11238000     89.4
##  5 2025-01-08 WMT     91.1  91.8  90.8  91.8 13453600     90.4
##  6 2025-01-10 WMT     92.5  93.6  92.2  93   18140900     91.5
##  7 2025-01-13 WMT     92.1  92.4  91.1  91.5 18617100     90.1
##  8 2025-01-14 WMT     91.9  92.0  90.6  90.8 13549200     89.4
##  9 2025-01-15 WMT     91.1  91.7  90.8  91.3 17348200     89.9
## 10 2025-01-16 WMT     91.5  91.7  90.1  91.3 13267700     89.9
## # ℹ 490 more rows

Add columns

stocks %>% mutate(price_change = close-open)
## # A tibble: 500 × 9
##    symbol date        open  high   low close   volume adjusted price_change
##    <chr>  <date>     <dbl> <dbl> <dbl> <dbl>    <dbl>    <dbl>        <dbl>
##  1 WMT    2025-01-02  90.0  90.6  89.5  90   14820400     88.6       0.0200
##  2 WMT    2025-01-03  90.2  91.3  90.1  90.8 10834600     89.4       0.630 
##  3 WMT    2025-01-06  90.8  92.5  90.7  91.4 14519900     90.0       0.600 
##  4 WMT    2025-01-07  91.7  91.9  90.4  90.8 11238000     89.4      -0.890 
##  5 WMT    2025-01-08  91.1  91.8  90.8  91.8 13453600     90.4       0.690 
##  6 WMT    2025-01-10  92.5  93.6  92.2  93   18140900     91.5       0.510 
##  7 WMT    2025-01-13  92.1  92.4  91.1  91.5 18617100     90.1      -0.590 
##  8 WMT    2025-01-14  91.9  92.0  90.6  90.8 13549200     89.4      -1.07  
##  9 WMT    2025-01-15  91.1  91.7  90.8  91.3 17348200     89.9       0.270 
## 10 WMT    2025-01-16  91.5  91.7  90.1  91.3 13267700     89.9      -0.200 
## # ℹ 490 more rows
stocks %>% mutate(price_change = (close-open)/open*100)
## # A tibble: 500 × 9
##    symbol date        open  high   low close   volume adjusted price_change
##    <chr>  <date>     <dbl> <dbl> <dbl> <dbl>    <dbl>    <dbl>        <dbl>
##  1 WMT    2025-01-02  90.0  90.6  89.5  90   14820400     88.6       0.0222
##  2 WMT    2025-01-03  90.2  91.3  90.1  90.8 10834600     89.4       0.699 
##  3 WMT    2025-01-06  90.8  92.5  90.7  91.4 14519900     90.0       0.661 
##  4 WMT    2025-01-07  91.7  91.9  90.4  90.8 11238000     89.4      -0.971 
##  5 WMT    2025-01-08  91.1  91.8  90.8  91.8 13453600     90.4       0.757 
##  6 WMT    2025-01-10  92.5  93.6  92.2  93   18140900     91.5       0.551 
##  7 WMT    2025-01-13  92.1  92.4  91.1  91.5 18617100     90.1      -0.640 
##  8 WMT    2025-01-14  91.9  92.0  90.6  90.8 13549200     89.4      -1.16  
##  9 WMT    2025-01-15  91.1  91.7  90.8  91.3 17348200     89.9       0.296 
## 10 WMT    2025-01-16  91.5  91.7  90.1  91.3 13267700     89.9      -0.219 
## # ℹ 490 more rows
mutate(stocks,
       gain = close - open) %>%
      select(date, symbol, gain)
## # A tibble: 500 × 3
##    date       symbol    gain
##    <date>     <chr>    <dbl>
##  1 2025-01-02 WMT     0.0200
##  2 2025-01-03 WMT     0.630 
##  3 2025-01-06 WMT     0.600 
##  4 2025-01-07 WMT    -0.890 
##  5 2025-01-08 WMT     0.690 
##  6 2025-01-10 WMT     0.510 
##  7 2025-01-13 WMT    -0.590 
##  8 2025-01-14 WMT    -1.07  
##  9 2025-01-15 WMT     0.270 
## 10 2025-01-16 WMT    -0.200 
## # ℹ 490 more rows
mutate(stocks,
       gain = close - open) %>%
    select(gain)
## # A tibble: 500 × 1
##       gain
##      <dbl>
##  1  0.0200
##  2  0.630 
##  3  0.600 
##  4 -0.890 
##  5  0.690 
##  6  0.510 
##  7 -0.590 
##  8 -1.07  
##  9  0.270 
## 10 -0.200 
## # ℹ 490 more rows
transmute(stocks,
          gain = close - open)
## # A tibble: 500 × 1
##       gain
##      <dbl>
##  1  0.0200
##  2  0.630 
##  3  0.600 
##  4 -0.890 
##  5  0.690 
##  6  0.510 
##  7 -0.590 
##  8 -1.07  
##  9  0.270 
## 10 -0.200 
## # ℹ 490 more rows

Summarize with groups

stocks %>% group_by(symbol)%>% 
summarize(avg_price=mean(adjusted,na.rm=TRUE))
## # A tibble: 2 × 2
##   symbol avg_price
##   <chr>      <dbl>
## 1 TGT         97.5
## 2 WMT         98.0