Import stock prices

stocks <- tq_get(c("MU", "PANW", "CRWD"),
                 get = "stock.prices",
                 from = "2020-01-01")
stocks
## # A tibble: 5,052 × 8
##    symbol date        open  high   low close   volume adjusted
##    <chr>  <date>     <dbl> <dbl> <dbl> <dbl>    <dbl>    <dbl>
##  1 MU     2020-01-02  54.8  55.5  54.5  55.4 20173200     54.0
##  2 MU     2020-01-03  54.2  55.3  54    54.5 16815800     53.2
##  3 MU     2020-01-06  53.8  54.1  53.2  53.6 18768700     52.2
##  4 MU     2020-01-07  55.4  58.4  55.4  58.3 49908200     56.8
##  5 MU     2020-01-08  58.1  58.4  57.1  57.5 29730800     56.1
##  6 MU     2020-01-09  58.3  58.5  56.5  57.3 22376100     55.9
##  7 MU     2020-01-10  57.5  57.5  56.3  56.7 19122800     55.3
##  8 MU     2020-01-13  57.0  57.8  56.9  57.5 16163000     56.0
##  9 MU     2020-01-14  57.8  58.3  56.5  57.5 26454300     56.1
## 10 MU     2020-01-15  57.0  57.1  55.8  56.2 21638600     54.8
## # ℹ 5,042 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: 4,932 × 8
##    symbol date        open  high   low close   volume adjusted
##    <chr>  <date>     <dbl> <dbl> <dbl> <dbl>    <dbl>    <dbl>
##  1 MU     2020-01-02  54.8  55.5  54.5  55.4 20173200     54.0
##  2 MU     2020-01-03  54.2  55.3  54    54.5 16815800     53.2
##  3 MU     2020-01-06  53.8  54.1  53.2  53.6 18768700     52.2
##  4 MU     2020-01-07  55.4  58.4  55.4  58.3 49908200     56.8
##  5 MU     2020-01-08  58.1  58.4  57.1  57.5 29730800     56.1
##  6 MU     2020-01-09  58.3  58.5  56.5  57.3 22376100     55.9
##  7 MU     2020-01-10  57.5  57.5  56.3  56.7 19122800     55.3
##  8 MU     2020-01-13  57.0  57.8  56.9  57.5 16163000     56.0
##  9 MU     2020-01-14  57.8  58.3  56.5  57.5 26454300     56.1
## 10 MU     2020-01-15  57.0  57.1  55.8  56.2 21638600     54.8
## # ℹ 4,922 more rows
stocks %>% filter(symbol == "MU")
## # A tibble: 1,684 × 8
##    symbol date        open  high   low close   volume adjusted
##    <chr>  <date>     <dbl> <dbl> <dbl> <dbl>    <dbl>    <dbl>
##  1 MU     2020-01-02  54.8  55.5  54.5  55.4 20173200     54.0
##  2 MU     2020-01-03  54.2  55.3  54    54.5 16815800     53.2
##  3 MU     2020-01-06  53.8  54.1  53.2  53.6 18768700     52.2
##  4 MU     2020-01-07  55.4  58.4  55.4  58.3 49908200     56.8
##  5 MU     2020-01-08  58.1  58.4  57.1  57.5 29730800     56.1
##  6 MU     2020-01-09  58.3  58.5  56.5  57.3 22376100     55.9
##  7 MU     2020-01-10  57.5  57.5  56.3  56.7 19122800     55.3
##  8 MU     2020-01-13  57.0  57.8  56.9  57.5 16163000     56.0
##  9 MU     2020-01-14  57.8  58.3  56.5  57.5 26454300     56.1
## 10 MU     2020-01-15  57.0  57.1  55.8  56.2 21638600     54.8
## # ℹ 1,674 more rows
stocks %>% filter(adjusted > 100)
## # A tibble: 1,674 × 8
##    symbol date        open  high   low close   volume adjusted
##    <chr>  <date>     <dbl> <dbl> <dbl> <dbl>    <dbl>    <dbl>
##  1 MU     2024-03-21  113.  114.  109.  110. 89554100     109.
##  2 MU     2024-03-22  109.  111.  107.  110. 37281400     109.
##  3 MU     2024-03-25  110.  121.  110.  117. 55766100     116.
##  4 MU     2024-03-26  119   122.  118.  119. 44295100     118.
##  5 MU     2024-03-27  119.  120.  117.  119. 29320700     118.
##  6 MU     2024-03-28  119.  120.  117.  118. 21047800     117.
##  7 MU     2024-04-01  119.  127.  119   124. 44309400     123.
##  8 MU     2024-04-02  123.  124.  121.  123. 25026400     122.
##  9 MU     2024-04-03  122.  128.  121.  128. 40130100     127.
## 10 MU     2024-04-04  130.  131.  124.  124. 36009900     123.
## # ℹ 1,664 more rows
stocks %>% filter(symbol == "PANW" & adjusted > 150)
## # A tibble: 618 × 8
##    symbol date        open  high   low close   volume adjusted
##    <chr>  <date>     <dbl> <dbl> <dbl> <dbl>    <dbl>    <dbl>
##  1 PANW   2023-12-12  150.  154.  150.  153.  9127000     153.
##  2 PANW   2023-12-13  153.  158.  153.  157. 10375600     157.
##  3 PANW   2023-12-14  158.  159   149.  150. 13592000     150.
##  4 PANW   2023-12-15  151.  155.  150.  154. 18221000     154.
##  5 PANW   2023-12-18  152.  155.  152.  154.  6663600     154.
##  6 PANW   2023-12-19  154.  155.  153.  154.  7760000     154.
##  7 PANW   2023-12-20  153.  154   150.  150.  6694400     150.
##  8 PANW   2023-12-26  149.  151.  149.  150.  3117400     150.
##  9 PANW   2024-01-09  144.  150.  143.  150.  7302400     150.
## 10 PANW   2024-01-10  153.  158.  153.  158. 10161600     158.
## # ℹ 608 more rows
stocks %>% filter(symbol == "MU" | symbol == "PANW")
## # A tibble: 3,368 × 8
##    symbol date        open  high   low close   volume adjusted
##    <chr>  <date>     <dbl> <dbl> <dbl> <dbl>    <dbl>    <dbl>
##  1 MU     2020-01-02  54.8  55.5  54.5  55.4 20173200     54.0
##  2 MU     2020-01-03  54.2  55.3  54    54.5 16815800     53.2
##  3 MU     2020-01-06  53.8  54.1  53.2  53.6 18768700     52.2
##  4 MU     2020-01-07  55.4  58.4  55.4  58.3 49908200     56.8
##  5 MU     2020-01-08  58.1  58.4  57.1  57.5 29730800     56.1
##  6 MU     2020-01-09  58.3  58.5  56.5  57.3 22376100     55.9
##  7 MU     2020-01-10  57.5  57.5  56.3  56.7 19122800     55.3
##  8 MU     2020-01-13  57.0  57.8  56.9  57.5 16163000     56.0
##  9 MU     2020-01-14  57.8  58.3  56.5  57.5 26454300     56.1
## 10 MU     2020-01-15  57.0  57.1  55.8  56.2 21638600     54.8
## # ℹ 3,358 more rows

Arrange Rows

arrange(stocks, desc(date))
## # A tibble: 5,052 × 8
##    symbol date        open  high   low close   volume adjusted
##    <chr>  <date>     <dbl> <dbl> <dbl> <dbl>    <dbl>    <dbl>
##  1 MU     2026-09-15  938.  945.  920.  928. 20434700     928.
##  2 PANW   2026-09-15  368.  380.  367.  375.  6476400     375.
##  3 CRWD   2026-09-15  233   244.  232.  242. 17227100     242.
##  4 MU     2026-09-14  906.  932.  903.  924. 27141900     924.
##  5 PANW   2026-09-14  346.  379.  340.  374. 12027300     374.
##  6 CRWD   2026-09-14  219   239.  216.  235. 25381500     235.
##  7 MU     2026-09-11  993.  994.  967.  975. 21740300     975.
##  8 PANW   2026-09-11  338.  341.  327.  331.  4679100     331.
##  9 CRWD   2026-09-11  208.  213.  204.  207.  6649500     207.
## 10 MU     2026-09-10  997   999   974.  977. 26230400     977.
## # ℹ 5,042 more rows

Select Columns

select(stocks, symbol, date, close)
## # A tibble: 5,052 × 3
##    symbol date       close
##    <chr>  <date>     <dbl>
##  1 MU     2020-01-02  55.4
##  2 MU     2020-01-03  54.5
##  3 MU     2020-01-06  53.6
##  4 MU     2020-01-07  58.3
##  5 MU     2020-01-08  57.5
##  6 MU     2020-01-09  57.3
##  7 MU     2020-01-10  56.7
##  8 MU     2020-01-13  57.5
##  9 MU     2020-01-14  57.5
## 10 MU     2020-01-15  56.2
## # ℹ 5,042 more rows

Add Columns

stocks %>%
  mutate(daily_price_diff = open - close) %>%
  select(symbol, date, daily_price_diff)
## # A tibble: 5,052 × 3
##    symbol date       daily_price_diff
##    <chr>  <date>                <dbl>
##  1 MU     2020-01-02           -0.540
##  2 MU     2020-01-03           -0.370
##  3 MU     2020-01-06            0.180
##  4 MU     2020-01-07           -2.89 
##  5 MU     2020-01-08            0.570
##  6 MU     2020-01-09            1.01 
##  7 MU     2020-01-10            0.800
##  8 MU     2020-01-13           -0.440
##  9 MU     2020-01-14            0.280
## 10 MU     2020-01-15            0.860
## # ℹ 5,042 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,052 × 6
##    symbol date       close prev_close  open overnight_gap
##    <chr>  <date>     <dbl>      <dbl> <dbl>         <dbl>
##  1 MU     2020-01-02  55.4       NA    54.8        NA    
##  2 MU     2020-01-03  54.5       55.4  54.2        -1.23 
##  3 MU     2020-01-06  53.6       54.5  53.8        -0.780
##  4 MU     2020-01-07  58.3       53.6  55.4         1.81 
##  5 MU     2020-01-08  57.5       58.3  58.1        -0.180
##  6 MU     2020-01-09  57.3       57.5  58.3         0.800
##  7 MU     2020-01-10  56.7       57.3  57.5         0.160
##  8 MU     2020-01-13  57.5       56.7  57.0         0.340
##  9 MU     2020-01-14  57.5       57.5  57.8         0.350
## 10 MU     2020-01-15  56.2       57.5  57.0        -0.490
## # ℹ 5,042 more rows
## cumsum
stocks %>%
  mutate(cumulative_volume = cumsum(volume)) %>%
  select(symbol, date, volume, cumulative_volume)
## # A tibble: 5,052 × 4
##    symbol date         volume cumulative_volume
##    <chr>  <date>        <dbl>             <dbl>
##  1 MU     2020-01-02 20173200          20173200
##  2 MU     2020-01-03 16815800          36989000
##  3 MU     2020-01-06 18768700          55757700
##  4 MU     2020-01-07 49908200         105665900
##  5 MU     2020-01-08 29730800         135396700
##  6 MU     2020-01-09 22376100         157772800
##  7 MU     2020-01-10 19122800         176895600
##  8 MU     2020-01-13 16163000         193058600
##  9 MU     2020-01-14 26454300         219512900
## 10 MU     2020-01-15 21638600         241151500
## # ℹ 5,042 more rows

Summarize by 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 CRWD        68.5
## 2 PANW       124. 
## 3 MU         146.