Import stock prices

stocks <- tq_get(c("IFX.DE", "NXPI"),
                 get = "stock.prices",
                 from = "2025-01-01",
                 to = "2026-01-01")
stocks
## # A tibble: 503 × 8
##    symbol date        open  high   low close  volume adjusted
##    <chr>  <date>     <dbl> <dbl> <dbl> <dbl>   <dbl>    <dbl>
##  1 IFX.DE 2025-01-02  31.3  32.0  30.9  31.4 3387601     30.9
##  2 IFX.DE 2025-01-03  31.3  31.3  30.5  31   2736099     30.5
##  3 IFX.DE 2025-01-06  31.5  33.5  31.4  33.3 7005897     32.7
##  4 IFX.DE 2025-01-07  33.3  34.0  33.2  34.0 4455990     33.4
##  5 IFX.DE 2025-01-08  33.7  33.8  32.6  32.7 3304826     32.2
##  6 IFX.DE 2025-01-09  32.2  32.6  32.2  32.3 2419930     31.7
##  7 IFX.DE 2025-01-10  32.2  32.5  31.7  32.2 3111140     31.7
##  8 IFX.DE 2025-01-13  31.8  32.5  31.2  32.5 3424739     31.9
##  9 IFX.DE 2025-01-14  32.9  33.3  32.7  32.8 2842022     32.3
## 10 IFX.DE 2025-01-15  32.8  34.1  32.7  33.4 4122889     32.8
## # ℹ 493 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

filter rows

stocks %>% filter(date >= "2025-01-01" & date <= "2025-01-31")
## # A tibble: 42 × 8
##    symbol date        open  high   low close  volume adjusted
##    <chr>  <date>     <dbl> <dbl> <dbl> <dbl>   <dbl>    <dbl>
##  1 IFX.DE 2025-01-02  31.3  32.0  30.9  31.4 3387601     30.9
##  2 IFX.DE 2025-01-03  31.3  31.3  30.5  31   2736099     30.5
##  3 IFX.DE 2025-01-06  31.5  33.5  31.4  33.3 7005897     32.7
##  4 IFX.DE 2025-01-07  33.3  34.0  33.2  34.0 4455990     33.4
##  5 IFX.DE 2025-01-08  33.7  33.8  32.6  32.7 3304826     32.2
##  6 IFX.DE 2025-01-09  32.2  32.6  32.2  32.3 2419930     31.7
##  7 IFX.DE 2025-01-10  32.2  32.5  31.7  32.2 3111140     31.7
##  8 IFX.DE 2025-01-13  31.8  32.5  31.2  32.5 3424739     31.9
##  9 IFX.DE 2025-01-14  32.9  33.3  32.7  32.8 2842022     32.3
## 10 IFX.DE 2025-01-15  32.8  34.1  32.7  33.4 4122889     32.8
## # ℹ 32 more rows

arrange rows

stocks %>% arrange(desc(date))
## # A tibble: 503 × 8
##    symbol date        open  high   low close  volume adjusted
##    <chr>  <date>     <dbl> <dbl> <dbl> <dbl>   <dbl>    <dbl>
##  1 NXPI   2025-12-31 220.  220.  217.  217.  1413000    215. 
##  2 IFX.DE 2025-12-30  36.8  37.7  36.8  37.7 2024272     37.4
##  3 NXPI   2025-12-30 221.  223.  220.  220.  1746100    218. 
##  4 IFX.DE 2025-12-29  36.8  37.0  36.3  36.7 2354027     36.5
##  5 NXPI   2025-12-29 222.  224.  219.  220.  2498400    219. 
##  6 NXPI   2025-12-26 226.  226.  223.  223.  1439700    221. 
##  7 NXPI   2025-12-24 226.  228.  225.  225.  1031000    223. 
##  8 IFX.DE 2025-12-23  36.6  36.9  36.5  36.7 1729190     36.4
##  9 NXPI   2025-12-23 227.  228.  224.  226.  1871300    224. 
## 10 IFX.DE 2025-12-22  36.1  36.9  36.1  36.7 2872269     36.4
## # ℹ 493 more rows

select columns

stocks %>% select(symbol, date, adjusted)
## # A tibble: 503 × 3
##    symbol date       adjusted
##    <chr>  <date>        <dbl>
##  1 IFX.DE 2025-01-02     30.9
##  2 IFX.DE 2025-01-03     30.5
##  3 IFX.DE 2025-01-06     32.7
##  4 IFX.DE 2025-01-07     33.4
##  5 IFX.DE 2025-01-08     32.2
##  6 IFX.DE 2025-01-09     31.7
##  7 IFX.DE 2025-01-10     31.7
##  8 IFX.DE 2025-01-13     31.9
##  9 IFX.DE 2025-01-14     32.3
## 10 IFX.DE 2025-01-15     32.8
## # ℹ 493 more rows

add columns

stocks %>%
  group_by(symbol) %>%
  arrange(date) %>%
  mutate(price_change = adjusted - lag(adjusted))
## # A tibble: 503 × 9
## # Groups:   symbol [2]
##    symbol date        open  high   low close  volume adjusted price_change
##    <chr>  <date>     <dbl> <dbl> <dbl> <dbl>   <dbl>    <dbl>        <dbl>
##  1 IFX.DE 2025-01-02  31.3  32.0  30.9  31.4 3387601     30.9       NA    
##  2 NXPI   2025-01-02 210.  212.  205.  206.  1424300    201.        NA    
##  3 IFX.DE 2025-01-03  31.3  31.3  30.5  31   2736099     30.5       -0.388
##  4 NXPI   2025-01-03 207.  210.  205   209.  2308100    203.         2.58 
##  5 IFX.DE 2025-01-06  31.5  33.5  31.4  33.3 7005897     32.7        2.24 
##  6 NXPI   2025-01-06 210.  216.  210.  213.  1972700    208.         4.43 
##  7 IFX.DE 2025-01-07  33.3  34.0  33.2  34.0 4455990     33.4        0.669
##  8 NXPI   2025-01-07 214.  219.  211.  213.  2312200    207.        -0.808
##  9 IFX.DE 2025-01-08  33.7  33.8  32.6  32.7 3304826     32.2       -1.23 
## 10 NXPI   2025-01-08 212.  213.  207.  210.  2302600    204.        -2.78 
## # ℹ 493 more rows

summarise with groups

stocks %>%
  group_by(symbol) %>%
  summarise(
    average_price = mean(adjusted, na.rm = TRUE),
    number_of_days = n()
  )
## # A tibble: 2 × 3
##   symbol average_price number_of_days
##   <chr>          <dbl>          <int>
## 1 IFX.DE          33.8            253
## 2 NXPI           208.             250