Import stock prices

stocks <- tq_get(c("HD", "XOM", "AXP"),
                 get = "stock.prices",
                 from = "2020-01-01",
                 to = "2021-01-01")
stocks
## # A tibble: 759 × 8
##    symbol date        open  high   low close  volume adjusted
##    <chr>  <date>     <dbl> <dbl> <dbl> <dbl>   <dbl>    <dbl>
##  1 HD     2020-01-02  219.  220.  218.  220. 3935700     206.
##  2 HD     2020-01-03  217.  220.  217.  219. 3423200     206.
##  3 HD     2020-01-06  216.  220   216.  220. 5682800     207.
##  4 HD     2020-01-07  220.  221.  217.  219. 5685400     205.
##  5 HD     2020-01-08  219.  223.  219.  222. 4916200     208.
##  6 HD     2020-01-09  223.  226.  222.  225. 4843600     211.
##  7 HD     2020-01-10  225.  225.  223.  224. 4226600     211.
##  8 HD     2020-01-13  224.  225.  223.  223. 6060900     210.
##  9 HD     2020-01-14  222.  225.  222.  223. 3915100     209.
## 10 HD     2020-01-15  222.  225.  222.  225. 3444300     211.
## # … with 749 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 > 100)
## # A tibble: 370 × 8
##    symbol date        open  high   low close  volume adjusted
##    <chr>  <date>     <dbl> <dbl> <dbl> <dbl>   <dbl>    <dbl>
##  1 HD     2020-01-02  219.  220.  218.  220. 3935700     206.
##  2 HD     2020-01-03  217.  220.  217.  219. 3423200     206.
##  3 HD     2020-01-06  216.  220   216.  220. 5682800     207.
##  4 HD     2020-01-07  220.  221.  217.  219. 5685400     205.
##  5 HD     2020-01-08  219.  223.  219.  222. 4916200     208.
##  6 HD     2020-01-09  223.  226.  222.  225. 4843600     211.
##  7 HD     2020-01-10  225.  225.  223.  224. 4226600     211.
##  8 HD     2020-01-13  224.  225.  223.  223. 6060900     210.
##  9 HD     2020-01-14  222.  225.  222.  223. 3915100     209.
## 10 HD     2020-01-15  222.  225.  222.  225. 3444300     211.
## # … with 360 more rows

Arrange rows

arrange(stocks)
## # A tibble: 759 × 8
##    symbol date        open  high   low close  volume adjusted
##    <chr>  <date>     <dbl> <dbl> <dbl> <dbl>   <dbl>    <dbl>
##  1 HD     2020-01-02  219.  220.  218.  220. 3935700     206.
##  2 HD     2020-01-03  217.  220.  217.  219. 3423200     206.
##  3 HD     2020-01-06  216.  220   216.  220. 5682800     207.
##  4 HD     2020-01-07  220.  221.  217.  219. 5685400     205.
##  5 HD     2020-01-08  219.  223.  219.  222. 4916200     208.
##  6 HD     2020-01-09  223.  226.  222.  225. 4843600     211.
##  7 HD     2020-01-10  225.  225.  223.  224. 4226600     211.
##  8 HD     2020-01-13  224.  225.  223.  223. 6060900     210.
##  9 HD     2020-01-14  222.  225.  222.  223. 3915100     209.
## 10 HD     2020-01-15  222.  225.  222.  225. 3444300     211.
## # … with 749 more rows

Select columns

select(stocks, symbol, high, low)
## # A tibble: 759 × 3
##    symbol  high   low
##    <chr>  <dbl> <dbl>
##  1 HD      220.  218.
##  2 HD      220.  217.
##  3 HD      220   216.
##  4 HD      221.  217.
##  5 HD      223.  219.
##  6 HD      226.  222.
##  7 HD      225.  223.
##  8 HD      225.  223.
##  9 HD      225.  222.
## 10 HD      225.  222.
## # … with 749 more rows

Add columns

select(stocks, symbol, high, low) %>% 
    mutate(stocks, 
           gain = high - low)
## # A tibble: 759 × 9
##    symbol  high   low date        open close  volume adjusted  gain
##    <chr>  <dbl> <dbl> <date>     <dbl> <dbl>   <dbl>    <dbl> <dbl>
##  1 HD      220.  218. 2020-01-02  219.  220. 3935700     206.  1.92
##  2 HD      220.  217. 2020-01-03  217.  219. 3423200     206.  2.93
##  3 HD      220   216. 2020-01-06  216.  220. 5682800     207.  3.60
##  4 HD      221.  217. 2020-01-07  220.  219. 5685400     205.  3.66
##  5 HD      223.  219. 2020-01-08  219.  222. 4916200     208.  4.30
##  6 HD      226.  222. 2020-01-09  223.  225. 4843600     211.  3.70
##  7 HD      225.  223. 2020-01-10  225.  224. 4226600     211.  2.46
##  8 HD      225.  223. 2020-01-13  224.  223. 6060900     210.  1.83
##  9 HD      225.  222. 2020-01-14  222.  223. 3915100     209.  2.64
## 10 HD      225.  222. 2020-01-15  222.  225. 3444300     211.  2.85
## # … with 749 more rows

Summarise with groups

stocks %>%
    
    # group by stock
    group_by(symbol) %>%
    
    # calculate gain
    summarise(gain = high - low) %>%
    
    # sort
    arrange(gain)
## `summarise()` has grouped output by 'symbol'. You can override using the
## `.groups` argument.
## # A tibble: 759 × 2
## # Groups:   symbol [3]
##    symbol  gain
##    <chr>  <dbl>
##  1 XOM    0.470
##  2 XOM    0.480
##  3 XOM    0.5  
##  4 XOM    0.5  
##  5 XOM    0.520
##  6 XOM    0.530
##  7 XOM    0.570
##  8 XOM    0.580
##  9 XOM    0.590
## 10 XOM    0.600
## # … with 749 more rows