Import stock prices
stocks <- tq_get(c("DLR", "GOOG", "NVDA"),
get = "stock.prices",
from = "2020-01-01")
stocks
## # A tibble: 5,046 × 8
## symbol date open high low close volume adjusted
## <chr> <date> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
## 1 DLR 2020-01-02 120. 120. 117. 118 1071900 94.8
## 2 DLR 2020-01-03 117. 120. 117. 120. 869400 96.3
## 3 DLR 2020-01-06 119. 120. 118. 119. 1151000 95.5
## 4 DLR 2020-01-07 118. 119. 117. 118. 1006400 94.5
## 5 DLR 2020-01-08 118. 119. 117. 119. 2553900 95.4
## 6 DLR 2020-01-09 118. 120. 118. 119. 980000 95.4
## 7 DLR 2020-01-10 119. 121. 118. 120. 2048800 96.7
## 8 DLR 2020-01-13 121. 122. 120. 122. 2072100 98.0
## 9 DLR 2020-01-14 122. 123. 120. 121. 2408200 97.0
## 10 DLR 2020-01-15 121. 122. 121. 121. 1443700 97.2
## # ℹ 5,036 more rows
Apply the dplyr verbs you leared in chapter 5
Filter rows
stocks %>% filter(adjusted > 24)
## # A tibble: 4,334 × 8
## symbol date open high low close volume adjusted
## <chr> <date> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
## 1 DLR 2020-01-02 120. 120. 117. 118 1071900 94.8
## 2 DLR 2020-01-03 117. 120. 117. 120. 869400 96.3
## 3 DLR 2020-01-06 119. 120. 118. 119. 1151000 95.5
## 4 DLR 2020-01-07 118. 119. 117. 118. 1006400 94.5
## 5 DLR 2020-01-08 118. 119. 117. 119. 2553900 95.4
## 6 DLR 2020-01-09 118. 120. 118. 119. 980000 95.4
## 7 DLR 2020-01-10 119. 121. 118. 120. 2048800 96.7
## 8 DLR 2020-01-13 121. 122. 120. 122. 2072100 98.0
## 9 DLR 2020-01-14 122. 123. 120. 121. 2408200 97.0
## 10 DLR 2020-01-15 121. 122. 121. 121. 1443700 97.2
## # ℹ 4,324 more rows
stocks %>% filter(symbol == "GOOG")
## # A tibble: 1,682 × 8
## symbol date open high low close volume adjusted
## <chr> <date> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
## 1 GOOG 2020-01-02 67.1 68.4 67.1 68.4 28132000 67.7
## 2 GOOG 2020-01-03 67.4 68.6 67.3 68.0 23728000 67.4
## 3 GOOG 2020-01-06 67.5 69.8 67.5 69.7 34646000 69.1
## 4 GOOG 2020-01-07 69.9 70.1 69.5 69.7 30054000 69.0
## 5 GOOG 2020-01-08 69.6 70.6 69.5 70.2 30560000 69.6
## 6 GOOG 2020-01-09 71.0 71.4 70.5 71.0 30018000 70.3
## 7 GOOG 2020-01-10 71.4 71.7 70.9 71.5 36414000 70.8
## 8 GOOG 2020-01-13 71.8 72.0 71.3 72.0 33046000 71.3
## 9 GOOG 2020-01-14 72.0 72.1 71.4 71.5 31178000 70.9
## 10 GOOG 2020-01-15 71.5 72.1 71.5 72.0 25654000 71.3
## # ℹ 1,672 more rows
stocks %>% filter(adjusted > 100)
## # A tibble: 3,345 × 8
## symbol date open high low close volume adjusted
## <chr> <date> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
## 1 DLR 2020-01-21 124. 126. 124. 126. 1286400 101.
## 2 DLR 2020-01-22 126. 127. 126. 126. 1648000 101.
## 3 DLR 2020-01-23 126. 128. 126. 127. 1258900 102.
## 4 DLR 2020-01-24 127. 129. 127. 128. 1916300 103.
## 5 DLR 2020-01-27 128. 129. 128. 129. 1527000 104.
## 6 DLR 2020-01-28 129. 130. 129. 130. 1678100 104.
## 7 DLR 2020-01-29 130. 130. 128. 128. 1895900 103.
## 8 DLR 2020-01-30 127. 128. 126. 126. 1594700 101.
## 9 DLR 2020-02-04 124. 125. 123. 125. 1222500 100.
## 10 DLR 2020-02-10 124. 126. 123. 126. 1854200 101.
## # ℹ 3,335 more rows
stocks %>% filter(symbol == "NVDA" & adjusted > 150)
## # A tibble: 306 × 8
## symbol date open high low close volume adjusted
## <chr> <date> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
## 1 NVDA 2025-06-25 149. 154. 149. 154. 269146500 154.
## 2 NVDA 2025-06-26 156. 157. 154 155. 198145700 155.
## 3 NVDA 2025-06-27 156. 159. 155. 158. 263234500 157.
## 4 NVDA 2025-06-30 158. 159. 156. 158. 194580300 158.
## 5 NVDA 2025-07-01 156. 157. 151. 153. 213143600 153.
## 6 NVDA 2025-07-02 153. 158. 153. 157. 171224100 157.
## 7 NVDA 2025-07-03 158. 161. 158. 159. 143716100 159.
## 8 NVDA 2025-07-07 158. 159. 157. 158. 140139000 158.
## 9 NVDA 2025-07-08 159. 160. 158. 160 138133000 160.
## 10 NVDA 2025-07-09 161. 164. 161. 163. 183656400 162.
## # ℹ 296 more rows
stocks %>% filter(symbol == "NVDA" | symbol == "DLR")
## # A tibble: 3,364 × 8
## symbol date open high low close volume adjusted
## <chr> <date> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
## 1 DLR 2020-01-02 120. 120. 117. 118 1071900 94.8
## 2 DLR 2020-01-03 117. 120. 117. 120. 869400 96.3
## 3 DLR 2020-01-06 119. 120. 118. 119. 1151000 95.5
## 4 DLR 2020-01-07 118. 119. 117. 118. 1006400 94.5
## 5 DLR 2020-01-08 118. 119. 117. 119. 2553900 95.4
## 6 DLR 2020-01-09 118. 120. 118. 119. 980000 95.4
## 7 DLR 2020-01-10 119. 121. 118. 120. 2048800 96.7
## 8 DLR 2020-01-13 121. 122. 120. 122. 2072100 98.0
## 9 DLR 2020-01-14 122. 123. 120. 121. 2408200 97.0
## 10 DLR 2020-01-15 121. 122. 121. 121. 1443700 97.2
## # ℹ 3,354 more rows
Arrange rows
arrange(stocks, desc(date))
## # A tibble: 5,046 × 8
## symbol date open high low close volume adjusted
## <chr> <date> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
## 1 DLR 2026-09-11 187. 190. 186. 189. 1339800 189.
## 2 GOOG 2026-09-11 333. 340. 333. 335. 15792800 335.
## 3 NVDA 2026-09-11 221. 222 218. 218. 88804100 218.
## 4 DLR 2026-09-10 189. 191. 185. 185. 1534200 185.
## 5 GOOG 2026-09-10 326. 331. 326. 330. 16418900 330.
## 6 NVDA 2026-09-10 221. 221. 217. 218. 105768000 218.
## 7 DLR 2026-09-09 189. 191. 188. 189. 1503200 189.
## 8 GOOG 2026-09-09 329. 329. 326. 328. 19326900 328.
## 9 NVDA 2026-09-09 225. 226. 223. 224. 82955500 223.
## 10 DLR 2026-09-08 188. 192. 187. 190. 1573600 190.
## # ℹ 5,036 more rows
Select columns
select(stocks, symbol, date, close)
## # A tibble: 5,046 × 3
## symbol date close
## <chr> <date> <dbl>
## 1 DLR 2020-01-02 118
## 2 DLR 2020-01-03 120.
## 3 DLR 2020-01-06 119.
## 4 DLR 2020-01-07 118.
## 5 DLR 2020-01-08 119.
## 6 DLR 2020-01-09 119.
## 7 DLR 2020-01-10 120.
## 8 DLR 2020-01-13 122.
## 9 DLR 2020-01-14 121.
## 10 DLR 2020-01-15 121.
## # ℹ 5,036 more rows
Add columns
stocks %>%
mutate(daily_price_diff = open - close) %>%
select(symbol, date, daily_price_diff)
## # A tibble: 5,046 × 3
## symbol date daily_price_diff
## <chr> <date> <dbl>
## 1 DLR 2020-01-02 2.01
## 2 DLR 2020-01-03 -2.71
## 3 DLR 2020-01-06 0.610
## 4 DLR 2020-01-07 0.690
## 5 DLR 2020-01-08 -0.870
## 6 DLR 2020-01-09 -0.420
## 7 DLR 2020-01-10 -1.31
## 8 DLR 2020-01-13 -1.36
## 9 DLR 2020-01-14 1.22
## 10 DLR 2020-01-15 -0.0300
## # ℹ 5,036 more rows
# Calculate the overnight gap using lag()
stocks %>%
mutate(prev_close = lag(close),
overnight_gap = open - prev_close) %>%
select(symbol, date, close, prev_close, open, overnight_gap)
## # A tibble: 5,046 × 6
## symbol date close prev_close open overnight_gap
## <chr> <date> <dbl> <dbl> <dbl> <dbl>
## 1 DLR 2020-01-02 118 NA 120. NA
## 2 DLR 2020-01-03 120. 118 117. -0.770
## 3 DLR 2020-01-06 119. 120. 119. -0.470
## 4 DLR 2020-01-07 118. 119. 118. -0.480
## 5 DLR 2020-01-08 119. 118. 118. 0.150
## 6 DLR 2020-01-09 119. 119. 118. -0.410
## 7 DLR 2020-01-10 120. 119. 119. 0.340
## 8 DLR 2020-01-13 122. 120. 121. 0.240
## 9 DLR 2020-01-14 121. 122. 122. 0
## 10 DLR 2020-01-15 121. 121. 121. 0.210
## # ℹ 5,036 more rows
## cumsum
stocks %>%
mutate(cumulative_volume = cumsum(volume)) %>%
select(symbol, date, volume, cumulative_volume)
## # A tibble: 5,046 × 4
## symbol date volume cumulative_volume
## <chr> <date> <dbl> <dbl>
## 1 DLR 2020-01-02 1071900 1071900
## 2 DLR 2020-01-03 869400 1941300
## 3 DLR 2020-01-06 1151000 3092300
## 4 DLR 2020-01-07 1006400 4098700
## 5 DLR 2020-01-08 2553900 6652600
## 6 DLR 2020-01-09 980000 7632600
## 7 DLR 2020-01-10 2048800 9681400
## 8 DLR 2020-01-13 2072100 11753500
## 9 DLR 2020-01-14 2408200 14161700
## 10 DLR 2020-01-15 1443700 15605400
## # ℹ 5,036 more rows
Summarise with groups
stocks %>%
# Group by stock symbol
group_by(symbol) %>%
# Calculate average adjusted price
summarise(avg_price = mean(adjusted, na.rm = TRUE)) %>%
# Sort it
arrange(avg_price)
## # A tibble: 3 × 2
## symbol avg_price
## <chr> <dbl>
## 1 NVDA 72.1
## 2 DLR 133.
## 3 GOOG 155.