Import stock prices
stocks <- tq_get(c("TSLA", "AMZN", "HD", "NVDA", "LLY"),
get = "stock.prices",
from = "2016-01-01",)
stocks
## # A tibble: 12,175 × 8
## symbol date open high low close volume adjusted
## <chr> <date> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
## 1 TSLA 2016-01-04 15.4 15.4 14.6 14.9 102406500 14.9
## 2 TSLA 2016-01-05 15.1 15.1 14.7 14.9 47802000 14.9
## 3 TSLA 2016-01-06 14.7 14.7 14.4 14.6 56686500 14.6
## 4 TSLA 2016-01-07 14.3 14.6 14.2 14.4 53314500 14.4
## 5 TSLA 2016-01-08 14.5 14.7 14.1 14.1 54421500 14.1
## 6 TSLA 2016-01-11 14.3 14.3 13.5 13.9 61371000 13.9
## 7 TSLA 2016-01-12 14.1 14.2 13.7 14.0 46378500 14.0
## 8 TSLA 2016-01-13 14.1 14.2 13.3 13.4 61896000 13.4
## 9 TSLA 2016-01-14 13.5 14 12.9 13.7 97360500 13.7
## 10 TSLA 2016-01-15 13.3 13.7 13.1 13.7 83679000 13.7
## # ℹ 12,165 more rows
Plot stock prices
stocks %>%
ggplot(aes(x = date, y = adjusted, color = symbol)) +
geom_line()

Apply the dyplr verbs you learned in Chapter 5
Filter Rows
stocks %>% filter(adjusted > 24)
## # A tibble: 9,502 × 8
## symbol date open high low close volume adjusted
## <chr> <date> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
## 1 TSLA 2017-06-08 24.2 24.8 24.0 24.7 135922500 24.7
## 2 TSLA 2017-06-13 24.5 25.1 24.4 25.1 177118500 25.1
## 3 TSLA 2017-06-14 25.4 25.6 25.1 25.4 192276000 25.4
## 4 TSLA 2017-06-15 24.8 25.0 24.4 25.0 156397500 25.0
## 5 TSLA 2017-06-16 25.2 25.2 24.7 24.8 100965000 24.8
## 6 TSLA 2017-06-19 25 25.1 24.5 24.7 98239500 24.7
## 7 TSLA 2017-06-20 25.1 25.3 24.6 24.8 111580500 24.8
## 8 TSLA 2017-06-21 25.0 25.1 24.5 25.1 73848000 25.1
## 9 TSLA 2017-06-22 25.2 25.7 24.9 25.5 112947000 25.5
## 10 TSLA 2017-06-23 25.5 25.8 25.3 25.6 96687000 25.6
## # ℹ 9,492 more rows
Arrange Rows
arrange(stocks, desc(date), desc(high))
## # A tibble: 12,175 × 8
## symbol date open high low close volume adjusted
## <chr> <date> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
## 1 LLY 2025-09-09 734. 753. 734. 751. 2986900 751.
## 2 HD 2025-09-09 418. 419. 413. 415. 3516000 415.
## 3 TSLA 2025-09-09 348. 351. 344. 347. 53816000 347.
## 4 AMZN 2025-09-09 236. 239. 235. 238. 27033800 238.
## 5 NVDA 2025-09-09 169. 171. 167. 171. 157548400 171.
## 6 LLY 2025-09-08 730. 743. 719. 739. 4534600 739.
## 7 HD 2025-09-08 418. 421. 416. 420. 3742600 420.
## 8 TSLA 2025-09-08 355. 358. 345. 346. 75208300 346.
## 9 AMZN 2025-09-08 235. 238. 234. 236. 33947100 236.
## 10 NVDA 2025-09-08 168. 171. 167. 168. 163769100 168.
## # ℹ 12,165 more rows
Select Columns
select(stocks, date, symbol, adjusted)
## # A tibble: 12,175 × 3
## date symbol adjusted
## <date> <chr> <dbl>
## 1 2016-01-04 TSLA 14.9
## 2 2016-01-05 TSLA 14.9
## 3 2016-01-06 TSLA 14.6
## 4 2016-01-07 TSLA 14.4
## 5 2016-01-08 TSLA 14.1
## 6 2016-01-11 TSLA 13.9
## 7 2016-01-12 TSLA 14.0
## 8 2016-01-13 TSLA 13.4
## 9 2016-01-14 TSLA 13.7
## 10 2016-01-15 TSLA 13.7
## # ℹ 12,165 more rows
Add Columns
mutate(stocks,
daily_returns = (adjusted - lag(adjusted))/lag(adjusted)) %>%
# Select symbol, date, daily_returns
select(symbol, date, daily_returns)
## # A tibble: 12,175 × 3
## symbol date daily_returns
## <chr> <date> <dbl>
## 1 TSLA 2016-01-04 NA
## 2 TSLA 2016-01-05 0.0000895
## 3 TSLA 2016-01-06 -0.0196
## 4 TSLA 2016-01-07 -0.0155
## 5 TSLA 2016-01-08 -0.0216
## 6 TSLA 2016-01-11 -0.0149
## 7 TSLA 2016-01-12 0.0102
## 8 TSLA 2016-01-13 -0.0460
## 9 TSLA 2016-01-14 0.0293
## 10 TSLA 2016-01-15 -0.00577
## # ℹ 12,165 more rows
# Using transmute() to only show daily_returns
transmute(stocks, daily_returns = (adjusted - lag(adjusted))/lag(adjusted))
## # A tibble: 12,175 × 1
## daily_returns
## <dbl>
## 1 NA
## 2 0.0000895
## 3 -0.0196
## 4 -0.0155
## 5 -0.0216
## 6 -0.0149
## 7 0.0102
## 8 -0.0460
## 9 0.0293
## 10 -0.00577
## # ℹ 12,165 more rows
Summarize with groups
stocks %>%
group_by(symbol) %>%
summarise(count = n(), avg_monthly_return = mean((adjusted - lag(adjusted))/lag(adjusted), na.rm = TRUE))
## # A tibble: 5 × 3
## symbol count avg_monthly_return
## <chr> <int> <dbl>
## 1 AMZN 2435 0.00104
## 2 HD 2435 0.000692
## 3 LLY 2435 0.00115
## 4 NVDA 2435 0.00271
## 5 TSLA 2435 0.00200