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