Import stock prices

stocks <- tq_get(c("HIMS", "PFE", "MRK"),
                 get = "stock.prices",
                 from = "2022-01-01",
                 to = "2025-01-01")
stocks
## # A tibble: 2,259 × 8
##    symbol date        open  high   low close  volume adjusted
##    <chr>  <date>     <dbl> <dbl> <dbl> <dbl>   <dbl>    <dbl>
##  1 HIMS   2022-01-03  6.58  6.80  6.54  6.75 1615200     6.75
##  2 HIMS   2022-01-04  6.80  6.89  6.38  6.5  1796600     6.5 
##  3 HIMS   2022-01-05  6.38  6.49  5.85  5.88 2813100     5.88
##  4 HIMS   2022-01-06  5.91  5.97  5.60  5.73 2617700     5.73
##  5 HIMS   2022-01-07  5.71  5.89  5.67  5.74 1628400     5.74
##  6 HIMS   2022-01-10  5.61  5.61  5.25  5.58 2581200     5.58
##  7 HIMS   2022-01-11  5.58  5.84  5.54  5.77 1715300     5.77
##  8 HIMS   2022-01-12  5.75  5.91  5.55  5.58 1356600     5.58
##  9 HIMS   2022-01-13  5.64  5.65  5.22  5.25 1710600     5.25
## 10 HIMS   2022-01-14  5.15  5.32  5.10  5.29 1759900     5.29
## # ℹ 2,249 more rows

Plot stock prices

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

Apply the dplyr verbs you learned in chapter 5

Fliter Rows

stocks %>% filter(adjusted > 24)
## # A tibble: 1,526 × 8
##    symbol date        open  high   low close   volume adjusted
##    <chr>  <date>     <dbl> <dbl> <dbl> <dbl>    <dbl>    <dbl>
##  1 HIMS   2024-06-13  23.7  24.6  23.2  24.4  9570100     24.4
##  2 HIMS   2024-06-17  24.2  25.5  23.2  24.1 14548500     24.1
##  3 HIMS   2024-06-18  23.6  25.7  23.5  24.8 11898400     24.8
##  4 HIMS   2024-11-11  24.8  29.7  24.4  27.9 38534700     27.9
##  5 HIMS   2024-11-12  26.5  28.4  26.2  26.7 15916200     26.7
##  6 HIMS   2024-11-13  29.1  30.4  27.5  27.6 21430900     27.6
##  7 HIMS   2024-11-21  21.9  24.6  21.4  24.1 24054400     24.1
##  8 HIMS   2024-11-22  23.7  25.4  23.0  25.3 17465100     25.3
##  9 HIMS   2024-11-25  26.5  31.4  26.4  31.4 49446700     31.4
## 10 HIMS   2024-11-26  29.9  31.7  29.4  30.7 19613600     30.7
## # ℹ 1,516 more rows
stocks %>% filter(symbol == "PFE")
## # A tibble: 753 × 8
##    symbol date        open  high   low close   volume adjusted
##    <chr>  <date>     <dbl> <dbl> <dbl> <dbl>    <dbl>    <dbl>
##  1 PFE    2022-01-03  58.5  58.5  56.3  56.7 57219200     47.7
##  2 PFE    2022-01-04  56.2  56.4  53.9  54.5 66993100     46.0
##  3 PFE    2022-01-05  55.8  56.4  55.4  55.6 52956400     46.9
##  4 PFE    2022-01-06  55.2  55.6  54.5  54.8 37000400     46.2
##  5 PFE    2022-01-07  55.4  55.8  54.6  55.7 27703400     47.0
##  6 PFE    2022-01-10  55.7  56.3  54.7  56.2 34044700     47.4
##  7 PFE    2022-01-11  56.8  57.4  55.8  56.7 33576600     47.8
##  8 PFE    2022-01-12  56.3  57.2  55.9  56.7 27608500     47.7
##  9 PFE    2022-01-13  56.5  56.8  55.2  55.5 28117900     46.8
## 10 PFE    2022-01-14  55.0  55.4  54.5  55.0 27072500     46.3
## # ℹ 743 more rows
stocks %>% filter(symbol == "MRK")
## # A tibble: 753 × 8
##    symbol date        open  high   low close   volume adjusted
##    <chr>  <date>     <dbl> <dbl> <dbl> <dbl>    <dbl>    <dbl>
##  1 MRK    2022-01-03  76.6  76.9  75.3  76.9  9441200     69.9
##  2 MRK    2022-01-04  76.4  77.3  75.9  77.0 11981700     70.0
##  3 MRK    2022-01-05  77.3  79.8  77.3  78.9 17447900     71.7
##  4 MRK    2022-01-06  78.8  79.6  77.9  78.8 11359200     71.7
##  5 MRK    2022-01-07  78.9  80.5  78.5  80.3 15212000     73.0
##  6 MRK    2022-01-10  80.5  82.4  79.7  82.4 19636800     74.9
##  7 MRK    2022-01-11  82.4  82.6  80.7  81.7 11585100     74.3
##  8 MRK    2022-01-12  81.1  81.4  80.7  81.2 13057000     73.9
##  9 MRK    2022-01-13  80.9  81.7  80.3  81.3  9678100     74.0
## 10 MRK    2022-01-14  81.6  81.8  80.8  81.4  9478000     74.0
## # ℹ 743 more rows

Arrange Rows

stocks %>%
    arrange(desc(open))
## # A tibble: 2,259 × 8
##    symbol date        open  high   low close   volume adjusted
##    <chr>  <date>     <dbl> <dbl> <dbl> <dbl>    <dbl>    <dbl>
##  1 MRK    2024-06-26  133.  133.  131.  132.  8492100     128.
##  2 MRK    2024-06-25  133.  135.  133.  133.  6758400     130.
##  3 MRK    2024-03-27  133.  133.  130.  132. 16061600     128.
##  4 MRK    2024-06-12  133.  133.  130.  130.  5822000     126.
##  5 MRK    2024-03-28  132   132.  131.  132. 10189700     128.
##  6 MRK    2024-06-27  132.  132.  127.  130. 11927600     127.
##  7 MRK    2024-04-29  132.  132.  129.  130.  6788000     126.
##  8 MRK    2024-04-01  132.  132.  130.  131.  5377600     127.
##  9 MRK    2024-05-21  132.  133.  130.  131.  6254700     127.
## 10 MRK    2024-05-24  131.  131.  129.  129.  5982800     126.
## # ℹ 2,249 more rows
stocks %>%
    arrange(desc(high), desc(open))
## # A tibble: 2,259 × 8
##    symbol date        open  high   low close   volume adjusted
##    <chr>  <date>     <dbl> <dbl> <dbl> <dbl>    <dbl>    <dbl>
##  1 MRK    2024-06-25  133.  135.  133.  133.  6758400     130.
##  2 MRK    2024-06-26  133.  133.  131.  132.  8492100     128.
##  3 MRK    2024-06-24  131.  133.  131.  133.  8553800     130.
##  4 MRK    2024-03-27  133.  133.  130.  132. 16061600     128.
##  5 MRK    2024-04-25  130.  133.  129.  131. 12750100     127.
##  6 MRK    2024-05-21  132.  133.  130.  131.  6254700     127.
##  7 MRK    2024-06-12  133.  133.  130.  130.  5822000     126.
##  8 MRK    2024-03-28  132   132.  131.  132. 10189700     128.
##  9 MRK    2024-04-03  130.  132.  129.  130.  7741400     126.
## 10 MRK    2024-06-27  132.  132.  127.  130. 11927600     127.
## # ℹ 2,249 more rows

Select Columns

stocks %>%
    select(symbol, date, open, close)
## # A tibble: 2,259 × 4
##    symbol date        open close
##    <chr>  <date>     <dbl> <dbl>
##  1 HIMS   2022-01-03  6.58  6.75
##  2 HIMS   2022-01-04  6.80  6.5 
##  3 HIMS   2022-01-05  6.38  5.88
##  4 HIMS   2022-01-06  5.91  5.73
##  5 HIMS   2022-01-07  5.71  5.74
##  6 HIMS   2022-01-10  5.61  5.58
##  7 HIMS   2022-01-11  5.58  5.77
##  8 HIMS   2022-01-12  5.75  5.58
##  9 HIMS   2022-01-13  5.64  5.25
## 10 HIMS   2022-01-14  5.15  5.29
## # ℹ 2,249 more rows
stocks %>%
    select(symbol, date, high, low)
## # A tibble: 2,259 × 4
##    symbol date        high   low
##    <chr>  <date>     <dbl> <dbl>
##  1 HIMS   2022-01-03  6.80  6.54
##  2 HIMS   2022-01-04  6.89  6.38
##  3 HIMS   2022-01-05  6.49  5.85
##  4 HIMS   2022-01-06  5.97  5.60
##  5 HIMS   2022-01-07  5.89  5.67
##  6 HIMS   2022-01-10  5.61  5.25
##  7 HIMS   2022-01-11  5.84  5.54
##  8 HIMS   2022-01-12  5.91  5.55
##  9 HIMS   2022-01-13  5.65  5.22
## 10 HIMS   2022-01-14  5.32  5.10
## # ℹ 2,249 more rows

Add Columns

stocks %>%
    mutate(daily_return = close - open) %>%
    select(symbol, date, open, close, daily_return)
## # A tibble: 2,259 × 5
##    symbol date        open close daily_return
##    <chr>  <date>     <dbl> <dbl>        <dbl>
##  1 HIMS   2022-01-03  6.58  6.75       0.170 
##  2 HIMS   2022-01-04  6.80  6.5       -0.300 
##  3 HIMS   2022-01-05  6.38  5.88      -0.5   
##  4 HIMS   2022-01-06  5.91  5.73      -0.180 
##  5 HIMS   2022-01-07  5.71  5.74       0.0300
##  6 HIMS   2022-01-10  5.61  5.58      -0.0350
##  7 HIMS   2022-01-11  5.58  5.77       0.190 
##  8 HIMS   2022-01-12  5.75  5.58      -0.170 
##  9 HIMS   2022-01-13  5.64  5.25      -0.390 
## 10 HIMS   2022-01-14  5.15  5.29       0.140 
## # ℹ 2,249 more rows
stocks %>%
    transmute(daily_return = close - open)
## # A tibble: 2,259 × 1
##    daily_return
##           <dbl>
##  1       0.170 
##  2      -0.300 
##  3      -0.5   
##  4      -0.180 
##  5       0.0300
##  6      -0.0350
##  7       0.190 
##  8      -0.170 
##  9      -0.390 
## 10       0.140 
## # ℹ 2,249 more rows
stocks %>%
    mutate(daily_range = high - low) %>%
    select(symbol, date, high, low, daily_range)
## # A tibble: 2,259 × 5
##    symbol date        high   low daily_range
##    <chr>  <date>     <dbl> <dbl>       <dbl>
##  1 HIMS   2022-01-03  6.80  6.54       0.260
##  2 HIMS   2022-01-04  6.89  6.38       0.510
##  3 HIMS   2022-01-05  6.49  5.85       0.640
##  4 HIMS   2022-01-06  5.97  5.60       0.370
##  5 HIMS   2022-01-07  5.89  5.67       0.220
##  6 HIMS   2022-01-10  5.61  5.25       0.365
##  7 HIMS   2022-01-11  5.84  5.54       0.300
##  8 HIMS   2022-01-12  5.91  5.55       0.360
##  9 HIMS   2022-01-13  5.65  5.22       0.430
## 10 HIMS   2022-01-14  5.32  5.10       0.218
## # ℹ 2,249 more rows
stocks %>%
    transmute(daily_range = high - low)
## # A tibble: 2,259 × 1
##    daily_range
##          <dbl>
##  1       0.260
##  2       0.510
##  3       0.640
##  4       0.370
##  5       0.220
##  6       0.365
##  7       0.300
##  8       0.360
##  9       0.430
## 10       0.218
## # ℹ 2,249 more rows

Summarize

Collapsing data into a single row

stocks %>%
    filter(symbol == "MRK") %>%
    mutate(daily_return = close - open) %>%
    select(symbol, date, open, close, daily_return) %>%
    summarise(daily_return = mean(daily_return))
## # A tibble: 1 × 1
##   daily_return
##          <dbl>
## 1      0.00434

Summarize by Group

stocks %>%
    
    # Group by Symbol
    group_by(symbol) %>%
    mutate(daily_return = close - open) %>%
    select(symbol, date, open, close, daily_return) %>%
    summarise(daily_return = mean(daily_return)) %>%

    # Sort it
    arrange(daily_return)
## # A tibble: 3 × 2
##   symbol daily_return
##   <chr>         <dbl>
## 1 PFE        -0.00818
## 2 MRK         0.00434
## 3 HIMS        0.0173