Import stock prices

stocks <- tq_get(c("WMT", "F", "AAPL"),
                 get = "stock.prices",
                 from = "2016-01-01",
                 to = "2017-01-01")
stocks
## # A tibble: 756 × 8
##    symbol date        open  high   low close   volume adjusted
##    <chr>  <date>     <dbl> <dbl> <dbl> <dbl>    <dbl>    <dbl>
##  1 WMT    2016-01-04  20.2  20.5  20.1  20.5 35967600     17.0
##  2 WMT    2016-01-05  20.7  21.0  20.6  21.0 39978000     17.4
##  3 WMT    2016-01-06  20.8  21.3  20.8  21.2 49693800     17.5
##  4 WMT    2016-01-07  21.0  21.7  21.0  21.7 79290000     18.0
##  5 WMT    2016-01-08  21.7  21.8  21.1  21.2 53303700     17.5
##  6 WMT    2016-01-11  21.3  21.5  21.2  21.4 37961400     17.7
##  7 WMT    2016-01-12  21.5  21.6  21.1  21.2 36587700     17.6
##  8 WMT    2016-01-13  21.2  21.2  20.6  20.6 41177100     17.1
##  9 WMT    2016-01-14  20.7  21.2  20.6  21.0 38804700     17.4
## 10 WMT    2016-01-15  20.5  20.8  20.4  20.6 45523200     17.1
## # ℹ 746 more rows

Plot stock prices

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

#import stock prices

stocks <- tq_get(c("WMT", "F", "AAPL"),
                 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 WMT    2020-01-02  39.6  40.0  39.6  39.6 20294700     36.2
##  2 WMT    2020-01-03  39.4  39.6  39.2  39.3 16197600     35.9
##  3 WMT    2020-01-06  39.1  39.4  38.9  39.2 19336500     35.8
##  4 WMT    2020-01-07  39.1  39.2  38.7  38.9 20540700     35.5
##  5 WMT    2020-01-08  38.8  38.9  38.6  38.7 17627400     35.4
##  6 WMT    2020-01-09  38.7  39.1  38.7  39.1 16691100     35.7
##  7 WMT    2020-01-10  39.1  39.1  38.7  38.8 18164400     35.4
##  8 WMT    2020-01-13  38.8  38.8  38.5  38.6 18337800     35.3
##  9 WMT    2020-01-14  38.5  38.7  38.4  38.7 19757400     35.4
## 10 WMT    2020-01-15  38.2  38.6  38.2  38.4 22362600     35.1
## # ℹ 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: 3,368 × 8
##    symbol date        open  high   low close   volume adjusted
##    <chr>  <date>     <dbl> <dbl> <dbl> <dbl>    <dbl>    <dbl>
##  1 WMT    2020-01-02  39.6  40.0  39.6  39.6 20294700     36.2
##  2 WMT    2020-01-03  39.4  39.6  39.2  39.3 16197600     35.9
##  3 WMT    2020-01-06  39.1  39.4  38.9  39.2 19336500     35.8
##  4 WMT    2020-01-07  39.1  39.2  38.7  38.9 20540700     35.5
##  5 WMT    2020-01-08  38.8  38.9  38.6  38.7 17627400     35.4
##  6 WMT    2020-01-09  38.7  39.1  38.7  39.1 16691100     35.7
##  7 WMT    2020-01-10  39.1  39.1  38.7  38.8 18164400     35.4
##  8 WMT    2020-01-13  38.8  38.8  38.5  38.6 18337800     35.3
##  9 WMT    2020-01-14  38.5  38.7  38.4  38.7 19757400     35.4
## 10 WMT    2020-01-15  38.2  38.6  38.2  38.4 22362600     35.1
## # ℹ 3,358 more rows
stocks %>% filter(symbol == "WMT")
## # A tibble: 1,684 × 8
##    symbol date        open  high   low close   volume adjusted
##    <chr>  <date>     <dbl> <dbl> <dbl> <dbl>    <dbl>    <dbl>
##  1 WMT    2020-01-02  39.6  40.0  39.6  39.6 20294700     36.2
##  2 WMT    2020-01-03  39.4  39.6  39.2  39.3 16197600     35.9
##  3 WMT    2020-01-06  39.1  39.4  38.9  39.2 19336500     35.8
##  4 WMT    2020-01-07  39.1  39.2  38.7  38.9 20540700     35.5
##  5 WMT    2020-01-08  38.8  38.9  38.6  38.7 17627400     35.4
##  6 WMT    2020-01-09  38.7  39.1  38.7  39.1 16691100     35.7
##  7 WMT    2020-01-10  39.1  39.1  38.7  38.8 18164400     35.4
##  8 WMT    2020-01-13  38.8  38.8  38.5  38.6 18337800     35.3
##  9 WMT    2020-01-14  38.5  38.7  38.4  38.7 19757400     35.4
## 10 WMT    2020-01-15  38.2  38.6  38.2  38.4 22362600     35.1
## # ℹ 1,674 more rows
stocks %>% filter(adjusted > 100)
## # A tibble: 1,810 × 8
##    symbol date        open  high   low close   volume adjusted
##    <chr>  <date>     <dbl> <dbl> <dbl> <dbl>    <dbl>    <dbl>
##  1 WMT    2025-02-05 101.   103. 101.   102. 15926700     101.
##  2 WMT    2025-02-06 103.   103. 102.   103. 13088500     101.
##  3 WMT    2025-02-10 102.   103. 101.   103. 15274600     101.
##  4 WMT    2025-02-11 103.   103. 102.   102. 11953600     101.
##  5 WMT    2025-02-12 102.   104. 102.   104. 15162100     102.
##  6 WMT    2025-02-13 104    105. 104.   105. 12604400     103.
##  7 WMT    2025-02-14 105.   105. 104.   104. 14109500     102.
##  8 WMT    2025-02-18 104.   104. 103.   104. 18247300     102.
##  9 WMT    2025-02-19 104.   104. 103.   104  18508000     102.
## 10 WMT    2025-08-06  99.5  104.  99.5  103. 23738400     102.
## # ℹ 1,800 more rows
stocks %>% filter(symbol == "F" & adjusted > 150)
## # A tibble: 0 × 8
## # ℹ 8 variables: symbol <chr>, date <date>, open <dbl>, high <dbl>, low <dbl>,
## #   close <dbl>, volume <dbl>, adjusted <dbl>
stocks %>% filter(symbol == "WMT" | symbol == "F")
## # A tibble: 3,368 × 8
##    symbol date        open  high   low close   volume adjusted
##    <chr>  <date>     <dbl> <dbl> <dbl> <dbl>    <dbl>    <dbl>
##  1 WMT    2020-01-02  39.6  40.0  39.6  39.6 20294700     36.2
##  2 WMT    2020-01-03  39.4  39.6  39.2  39.3 16197600     35.9
##  3 WMT    2020-01-06  39.1  39.4  38.9  39.2 19336500     35.8
##  4 WMT    2020-01-07  39.1  39.2  38.7  38.9 20540700     35.5
##  5 WMT    2020-01-08  38.8  38.9  38.6  38.7 17627400     35.4
##  6 WMT    2020-01-09  38.7  39.1  38.7  39.1 16691100     35.7
##  7 WMT    2020-01-10  39.1  39.1  38.7  38.8 18164400     35.4
##  8 WMT    2020-01-13  38.8  38.8  38.5  38.6 18337800     35.3
##  9 WMT    2020-01-14  38.5  38.7  38.4  38.7 19757400     35.4
## 10 WMT    2020-01-15  38.2  38.6  38.2  38.4 22362600     35.1
## # ℹ 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 WMT    2026-09-15 109.  109.  108.  108.  19316300    108. 
##  2 F      2026-09-15  13.9  13.9  13.5  13.5 45801400     13.5
##  3 AAPL   2026-09-15 330.  332.  328.  331.  31748200    331. 
##  4 WMT    2026-09-14 108.  110.  108   109.  23877400    109. 
##  5 F      2026-09-14  13.9  13.9  13.7  13.9 31579500     13.9
##  6 AAPL   2026-09-14 335.  336.  331.  333.  39269100    333. 
##  7 WMT    2026-09-11 106.  107.  106.  107.  17068600    107. 
##  8 F      2026-09-11  14.1  14.1  13.9  14.0 39394600     14.0
##  9 AAPL   2026-09-11 327.  336.  326.  332.  50716900    332. 
## 10 WMT    2026-09-10 106.  107.  106.  106.  17174900    106. 
## # ℹ 5,042 more rows

#Select Columns

select(stocks, symbol, date, close)
## # A tibble: 5,052 × 3
##    symbol date       close
##    <chr>  <date>     <dbl>
##  1 WMT    2020-01-02  39.6
##  2 WMT    2020-01-03  39.3
##  3 WMT    2020-01-06  39.2
##  4 WMT    2020-01-07  38.9
##  5 WMT    2020-01-08  38.7
##  6 WMT    2020-01-09  39.1
##  7 WMT    2020-01-10  38.8
##  8 WMT    2020-01-13  38.6
##  9 WMT    2020-01-14  38.7
## 10 WMT    2020-01-15  38.4
## # ℹ 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 WMT    2020-01-02          -0.0267
##  2 WMT    2020-01-03           0.127 
##  3 WMT    2020-01-06          -0.0833
##  4 WMT    2020-01-07           0.233 
##  5 WMT    2020-01-08           0.0467
##  6 WMT    2020-01-09          -0.403 
##  7 WMT    2020-01-10           0.287 
##  8 WMT    2020-01-13           0.167 
##  9 WMT    2020-01-14          -0.237 
## 10 WMT    2020-01-15          -0.217 
## # ℹ 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 WMT    2020-01-02  39.6       NA    39.6      NA      
##  2 WMT    2020-01-03  39.3       39.6  39.4      -0.223  
##  3 WMT    2020-01-06  39.2       39.3  39.1      -0.163  
##  4 WMT    2020-01-07  38.9       39.2  39.1      -0.130  
##  5 WMT    2020-01-08  38.7       38.9  38.8      -0.0867 
##  6 WMT    2020-01-09  39.1       38.7  38.7      -0.00333
##  7 WMT    2020-01-10  38.8       39.1  39.1      -0.0400 
##  8 WMT    2020-01-13  38.6       38.8  38.8       0      
##  9 WMT    2020-01-14  38.7       38.6  38.5      -0.137  
## 10 WMT    2020-01-15  38.4       38.7  38.2      -0.517  
## # ℹ 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 WMT    2020-01-02 20294700          20294700
##  2 WMT    2020-01-03 16197600          36492300
##  3 WMT    2020-01-06 19336500          55828800
##  4 WMT    2020-01-07 20540700          76369500
##  5 WMT    2020-01-08 17627400          93996900
##  6 WMT    2020-01-09 16691100         110688000
##  7 WMT    2020-01-10 18164400         128852400
##  8 WMT    2020-01-13 18337800         147190200
##  9 WMT    2020-01-14 19757400         166947600
## 10 WMT    2020-01-15 22362600         189310200
## # ℹ 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 F           9.96
## 2 WMT        63.7 
## 3 AAPL      177.