FB 2014-01-09 57.22 58.23 57.92 57.20 54.56 54.71
## 7 FB 2014-01-10 57.94 57.22 58.23 57.92 57.20 54.56
## 8 FB 2014-01-13 55.91 57.94 57.22 58.23 57.92 57.20
## 9 FB 2014-01-14 57.74 55.91 57.94 57.22 58.23 57.92
## 10 FB 2014-01-15 57.60 57.74 55.91 57.94 57.22 58.23
## # ... with 3,014 more rows
tq_mutate
与滚动函数
另一个例子,应用 xts
中的滚动函数 roll.apply()
。让我们借助函数 quantile()
得到滚动分位数。下面是每个函数的参数:
tq_mutate
的参数:
select = adjusted
,只选择复权修正过的数据列。该参数也可以不填,或选择其他不同的列。
mutate_fun = rollapply
,这是一个 xts
函数,将会以 “tidy” 的方式(分组)调用。
rollapply
的参数:
width = 5
,告诉 rollapply
计算窗口的周期(长度)是多少。
by.column = FALSE
,rollapply()
函数默认对每一列分别操作,然而我们要把所有列放在一起操作。
FUN = quantile
,quantile()
正是要被滚动调用的函数。
quantile
的参数:
probs = c(0, 0.025, ...)
,计算这些概率的分位数。
na.rm = TRUE
,quantile
会去掉遇到的 NA
值。
# Rolling quantile
FANG_data_d %>%
select(symbol, date, adjusted) %>%
group_by(symbol) %>%
tq_mutate(
select = adjusted,
mutate_fun = rollapply,
width = 5,
by.column = FALSE,
FUN = quantile,
probs = c(0, 0.025, 0.25, 0.5, 0.75, 0.975, 1),
na.rm = TRUE)
## # A tibble: 3,024 x 10
## # Groups: symbol [4]
## symbol date adjusted X0. X2.5. X25. X50. X75. X97.5.
## <chr> <date> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
## 1 FB 2014-01-02 54.71 NA NA NA NA NA NA
## 2 FB 2014-01-03 54.56 NA NA NA NA NA NA
## 3 FB 2014-01-06 57.20 NA NA NA NA NA NA
## 4 FB 2014-01-07 57.92 NA NA NA NA NA NA
## 5 FB 2014-01-08 58.23 54.56 54.575 54.71 57.20 57.92 58.199
## 6 FB 2014-01-09 57.22 54.56 54.824 57.20 57.22 57.92 58.199
## 7 FB 2014-01-10 57.94 57.20 57.202 57.22 57.92 57.94 58.201
## 8 FB 2014-01-13 55.91 55.91 56.041 57.22 57.92 57.94 58.201
## 9 FB 2014-01-14 57.74 55.91 56.041 57.22 57.74 57.94 58.201
## 10 FB 2014-01-15 57.60 55.91 56.041 57.22 57.60 57.74 57.920
## # ... with 3,014 more rows, and 1 more variables: X100. <dbl>
可用函数
已经介绍了如何将 xts
函数和 tq_transmute
与 tq_mutate
联合使用。还有许多 xts
函数可以以 “tidy” 的方式使用!用 tq_transmute_fun_options()
查看其他可用函数。
# Available functions
# mutate_fun =
tq_transmute_fun_options()
## $zoo
## [1] "rollapply" "rollapplyr" "rollmax"
## [4] "rollmax.default" "rollmaxr" "rollmean"
## [7] "rollmean.default" "rollmeanr" "rollmedian"
## [10] "rollmedian.default" "rollmedianr" "rollsum"
## [13] "rollsum.default" "rollsumr"
##
## $xts
## [1] "apply.daily" "apply.monthly" "apply.quarterly"
## [4] "apply.weekly" "apply.yearly" "diff.xts"
## [7] "lag.xts" "period.apply" "period.max"
## [10] "period.min" "period.prod" "period.sum"
## [13] "periodicity" "to.daily" "to.hourly"
## [16] "to.minutes" "to.minutes10" "to.minutes15"
## [19] "to.minutes3" "to.minutes30" "to.minutes5"
## [22] "to.monthly" "to.period" "to.quarterly"
## [25] "to.weekly" "to.yearly" "to_period"
##
## $quantmod
## [1] "allReturns" "annualReturn" "ClCl"
## [4] "dailyReturn" "Delt" "HiCl"
## [7] "Lag" "LoCl" "LoH