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

Plot stock prices

stocks %>%
    
    ggplot(aes(x = date, y = adjusted, color = symbol)) +
    geom_line()

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.