Import stock prices
stocks <- tq_get(c("GOOGL", "ELF", "COST"),
get = "stock.prices",
from = "2016-01-01")
stocks
## # A tibble: 6,151 × 8
## symbol date open high low close volume adjusted
## <chr> <date> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
## 1 GOOGL 2016-01-04 38.1 38.1 37.4 38.0 67382000 38.0
## 2 GOOGL 2016-01-05 38.2 38.5 37.8 38.1 45216000 38.1
## 3 GOOGL 2016-01-06 37.5 38.3 37.4 38.0 48206000 38.0
## 4 GOOGL 2016-01-07 37.3 37.8 36.8 37.0 63132000 37.0
## 5 GOOGL 2016-01-08 37.4 37.5 36.4 36.5 47506000 36.5
## 6 GOOGL 2016-01-11 36.6 36.8 36.0 36.7 50896000 36.7
## 7 GOOGL 2016-01-12 37.0 37.4 36.8 37.3 46816000 37.3
## 8 GOOGL 2016-01-13 37.5 37.7 35.8 36.0 51728000 36.0
## 9 GOOGL 2016-01-14 36.2 37.0 35.2 36.6 55558000 36.6
## 10 GOOGL 2016-01-15 35.5 36.2 35.1 35.5 76676000 35.5
## # ℹ 6,141 more rows
Apply the dplyr verbs learned in Chapter 5
Filter Rows
filter(stocks, high < 200, low > 100 )
## # A tibble: 1,528 × 8
## symbol date open high low close volume adjusted
## <chr> <date> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
## 1 GOOGL 2021-02-03 103. 105. 101. 103. 97882000 103.
## 2 GOOGL 2021-02-04 103. 103. 102. 103. 48596000 103.
## 3 GOOGL 2021-02-05 103. 105. 102. 104. 29866000 104.
## 4 GOOGL 2021-02-08 105 106. 103. 104. 28828000 104.
## 5 GOOGL 2021-02-09 104. 105. 104. 104. 21892000 104.
## 6 GOOGL 2021-02-10 104. 105. 103. 104. 25102000 104.
## 7 GOOGL 2021-02-11 105. 105. 103. 104. 20480000 104.
## 8 GOOGL 2021-02-12 104. 105. 104. 105. 18990000 105.
## 9 GOOGL 2021-02-16 105. 107. 105. 106. 31004000 106.
## 10 GOOGL 2021-02-17 105. 106. 104. 106. 20294000 106.
## # ℹ 1,518 more rows
filter(stocks, high < 200 | low > 100)
## # A tibble: 6,151 × 8
## symbol date open high low close volume adjusted
## <chr> <date> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
## 1 GOOGL 2016-01-04 38.1 38.1 37.4 38.0 67382000 38.0
## 2 GOOGL 2016-01-05 38.2 38.5 37.8 38.1 45216000 38.1
## 3 GOOGL 2016-01-06 37.5 38.3 37.4 38.0 48206000 38.0
## 4 GOOGL 2016-01-07 37.3 37.8 36.8 37.0 63132000 37.0
## 5 GOOGL 2016-01-08 37.4 37.5 36.4 36.5 47506000 36.5
## 6 GOOGL 2016-01-11 36.6 36.8 36.0 36.7 50896000 36.7
## 7 GOOGL 2016-01-12 37.0 37.4 36.8 37.3 46816000 37.3
## 8 GOOGL 2016-01-13 37.5 37.7 35.8 36.0 51728000 36.0
## 9 GOOGL 2016-01-14 36.2 37.0 35.2 36.6 55558000 36.6
## 10 GOOGL 2016-01-15 35.5 36.2 35.1 35.5 76676000 35.5
## # ℹ 6,141 more rows
filter(stocks, high < 200 & low > 100)
## # A tibble: 1,528 × 8
## symbol date open high low close volume adjusted
## <chr> <date> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
## 1 GOOGL 2021-02-03 103. 105. 101. 103. 97882000 103.
## 2 GOOGL 2021-02-04 103. 103. 102. 103. 48596000 103.
## 3 GOOGL 2021-02-05 103. 105. 102. 104. 29866000 104.
## 4 GOOGL 2021-02-08 105 106. 103. 104. 28828000 104.
## 5 GOOGL 2021-02-09 104. 105. 104. 104. 21892000 104.
## 6 GOOGL 2021-02-10 104. 105. 103. 104. 25102000 104.
## 7 GOOGL 2021-02-11 105. 105. 103. 104. 20480000 104.
## 8 GOOGL 2021-02-12 104. 105. 104. 105. 18990000 105.
## 9 GOOGL 2021-02-16 105. 107. 105. 106. 31004000 106.
## 10 GOOGL 2021-02-17 105. 106. 104. 106. 20294000 106.
## # ℹ 1,518 more rows
filter(stocks, !high < 200, low > 100)
## # A tibble: 1,526 × 8
## symbol date open high low close volume adjusted
## <chr> <date> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
## 1 ELF 2024-02-26 188. 200. 188 200. 1602000 200.
## 2 ELF 2024-02-27 201. 205. 198. 202 1504100 202
## 3 ELF 2024-02-28 200. 207. 199. 205. 1271900 205.
## 4 ELF 2024-02-29 206 210. 204. 209. 1213700 209.
## 5 ELF 2024-03-01 210 218. 208. 217. 1311000 217.
## 6 ELF 2024-03-04 220. 222. 206. 209. 1901000 209.
## 7 ELF 2024-03-05 206. 206. 193. 202. 2488700 202.
## 8 ELF 2024-03-06 207. 213. 207. 207. 1296200 207.
## 9 ELF 2024-03-07 208. 212. 207. 210. 755900 210.
## 10 ELF 2024-03-08 211. 214. 201. 201. 1478800 201.
## # ℹ 1,516 more rows
Arange Rows
arrange(stocks, symbol, date, open, close)
## # A tibble: 6,151 × 8
## symbol date open high low close volume adjusted
## <chr> <date> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
## 1 COST 2016-01-04 160. 160. 158. 160. 2640800 135.
## 2 COST 2016-01-05 160. 161. 159. 160. 2127700 136.
## 3 COST 2016-01-06 158. 160. 158. 158. 2033400 134.
## 4 COST 2016-01-07 155. 157. 154. 155. 3826000 131.
## 5 COST 2016-01-08 155. 155. 152. 152. 3156200 129.
## 6 COST 2016-01-11 152. 156. 152. 155. 2164500 131.
## 7 COST 2016-01-12 156. 156. 155. 156. 2215600 132.
## 8 COST 2016-01-13 156. 156. 152. 152. 2157500 129.
## 9 COST 2016-01-14 152. 154. 151. 153. 2281500 130.
## 10 COST 2016-01-15 149. 152. 148. 150. 2975400 128.
## # ℹ 6,141 more rows
arrange(stocks, desc(open))
## # A tibble: 6,151 × 8
## symbol date open high low close volume adjusted
## <chr> <date> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
## 1 COST 2024-05-22 800. 806. 798. 802. 1191500 802.
## 2 COST 2024-05-21 796. 801. 792 801. 1375700 801.
## 3 COST 2024-05-20 795. 803. 792. 793 1347100 793
## 4 COST 2024-05-17 794. 798. 791. 796. 1309100 796.
## 5 COST 2024-05-16 792. 805. 788. 793. 2000000 793.
## 6 COST 2024-05-13 788 789. 774. 775. 1596800 775.
## 7 COST 2024-03-07 779. 787. 777. 786. 4187900 784.
## 8 COST 2024-05-10 779. 787. 778. 787. 1652700 787.
## 9 COST 2024-05-15 779. 790. 779. 787. 1661700 787.
## 10 COST 2024-05-14 775. 781. 771. 778. 1327700 778.
## # ℹ 6,141 more rows
arrange(stocks, desc(close))
## # A tibble: 6,151 × 8
## symbol date open high low close volume adjusted
## <chr> <date> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
## 1 COST 2024-05-22 800. 806. 798. 802. 1191500 802.
## 2 COST 2024-05-21 796. 801. 792 801. 1375700 801.
## 3 COST 2024-05-17 794. 798. 791. 796. 1309100 796.
## 4 COST 2024-05-16 792. 805. 788. 793. 2000000 793.
## 5 COST 2024-05-20 795. 803. 792. 793 1347100 793
## 6 COST 2024-05-10 779. 787. 778. 787. 1652700 787.
## 7 COST 2024-05-15 779. 790. 779. 787. 1661700 787.
## 8 COST 2024-03-07 779. 787. 777. 786. 4187900 784.
## 9 COST 2024-05-09 764. 780. 764. 779. 1716200 779.
## 10 COST 2024-05-14 775. 781. 771. 778. 1327700 778.
## # ℹ 6,141 more rows
Select Columns
select(stocks, symbol:close)
## # A tibble: 6,151 × 6
## symbol date open high low close
## <chr> <date> <dbl> <dbl> <dbl> <dbl>
## 1 GOOGL 2016-01-04 38.1 38.1 37.4 38.0
## 2 GOOGL 2016-01-05 38.2 38.5 37.8 38.1
## 3 GOOGL 2016-01-06 37.5 38.3 37.4 38.0
## 4 GOOGL 2016-01-07 37.3 37.8 36.8 37.0
## 5 GOOGL 2016-01-08 37.4 37.5 36.4 36.5
## 6 GOOGL 2016-01-11 36.6 36.8 36.0 36.7
## 7 GOOGL 2016-01-12 37.0 37.4 36.8 37.3
## 8 GOOGL 2016-01-13 37.5 37.7 35.8 36.0
## 9 GOOGL 2016-01-14 36.2 37.0 35.2 36.6
## 10 GOOGL 2016-01-15 35.5 36.2 35.1 35.5
## # ℹ 6,141 more rows
select(stocks, symbol, date, open, close)
## # A tibble: 6,151 × 4
## symbol date open close
## <chr> <date> <dbl> <dbl>
## 1 GOOGL 2016-01-04 38.1 38.0
## 2 GOOGL 2016-01-05 38.2 38.1
## 3 GOOGL 2016-01-06 37.5 38.0
## 4 GOOGL 2016-01-07 37.3 37.0
## 5 GOOGL 2016-01-08 37.4 36.5
## 6 GOOGL 2016-01-11 36.6 36.7
## 7 GOOGL 2016-01-12 37.0 37.3
## 8 GOOGL 2016-01-13 37.5 36.0
## 9 GOOGL 2016-01-14 36.2 36.6
## 10 GOOGL 2016-01-15 35.5 35.5
## # ℹ 6,141 more rows
select(stocks, symbol, date, open, close, contains("adjusted"))
## # A tibble: 6,151 × 5
## symbol date open close adjusted
## <chr> <date> <dbl> <dbl> <dbl>
## 1 GOOGL 2016-01-04 38.1 38.0 38.0
## 2 GOOGL 2016-01-05 38.2 38.1 38.1
## 3 GOOGL 2016-01-06 37.5 38.0 38.0
## 4 GOOGL 2016-01-07 37.3 37.0 37.0
## 5 GOOGL 2016-01-08 37.4 36.5 36.5
## 6 GOOGL 2016-01-11 36.6 36.7 36.7
## 7 GOOGL 2016-01-12 37.0 37.3 37.3
## 8 GOOGL 2016-01-13 37.5 36.0 36.0
## 9 GOOGL 2016-01-14 36.2 36.6 36.6
## 10 GOOGL 2016-01-15 35.5 35.5 35.5
## # ℹ 6,141 more rows
Add Columns
# Show the range between the high and low points in the stock, along the symbol, date, open, high, low, and close columns
mutate(stocks,
range = high - low) %>%
select(symbol:close, range)
## # A tibble: 6,151 × 7
## symbol date open high low close range
## <chr> <date> <dbl> <dbl> <dbl> <dbl> <dbl>
## 1 GOOGL 2016-01-04 38.1 38.1 37.4 38.0 0.733
## 2 GOOGL 2016-01-05 38.2 38.5 37.8 38.1 0.677
## 3 GOOGL 2016-01-06 37.5 38.3 37.4 38.0 0.886
## 4 GOOGL 2016-01-07 37.3 37.8 36.8 37.0 1.00
## 5 GOOGL 2016-01-08 37.4 37.5 36.4 36.5 1.06
## 6 GOOGL 2016-01-11 36.6 36.8 36.0 36.7 0.776
## 7 GOOGL 2016-01-12 37.0 37.4 36.8 37.3 0.596
## 8 GOOGL 2016-01-13 37.5 37.7 35.8 36.0 1.81
## 9 GOOGL 2016-01-14 36.2 37.0 35.2 36.6 1.74
## 10 GOOGL 2016-01-15 35.5 36.2 35.1 35.5 1.13
## # ℹ 6,141 more rows
# Show only the range
mutate(stocks,
range = high - low) %>%
select(range)
## # A tibble: 6,151 × 1
## range
## <dbl>
## 1 0.733
## 2 0.677
## 3 0.886
## 4 1.00
## 5 1.06
## 6 0.776
## 7 0.596
## 8 1.81
## 9 1.74
## 10 1.13
## # ℹ 6,141 more rows
Summarise with groups
# Average open price for stocks
summarise(stocks, open = mean(open, na.rm = TRUE))
## # A tibble: 1 × 1
## open
## <dbl>
## 1 158.
# Group by Stock Symbol, calculate mean by open price, and sort it from low to high
stocks %>%
group_by(symbol) %>%
summarise(open = mean(open, na.rm = TRUE)) %>%
arrange(open)
## # A tibble: 3 × 2
## symbol open
## <chr> <dbl>
## 1 ELF 40.4
## 2 GOOGL 82.3
## 3 COST 342.