我正在尝试创建一个接收数据框并创建其他滞后和滚动窗口特征(例如移动平均线)的过程。这就是我到目前为止所拥有的。
# dummy dataframe
n <- 20
set.seed(123)
foo <- data.frame(
date = seq(as.Date('2020-01-01'),length.out = n, by = 'day'),
var1 = sample.int(n),
var2 = sample.int(n))
# creates lags and based on (some of) them creates rolling average features
foo %>%
mutate_at(vars(starts_with('var')),
funs(lag_1 = lag(.), lag_2 = lag(.,2))) %>%
mutate_at(vars(contains('lag_1')),
funs(ra_3 = rollmean(., k = 3, align = 'right', fill = NA)))
上面的块:
- 考虑所选变量创建 lag01,lag02 特征
- 基于新创建列的子集,创建滚动平均特征
我现在正在寻找的是创建任意数量的滞后特征(例如 lag3、lag6、lag9 等)以及创建任意数量的滚动平均特征(具有不同的窗口长度 - 即 var1_lag_1_ra_3、var1_lag_1_ra_6、var2_lag_1_ra_3、 var2_lag_1_ra_6。目前生成此类特征的设置是硬编码的。理想情况下,我会有几个向量来调整结果;像这样:
lag_features <- c(3,6,9)
ma_features <- c(12,15)
最后,如果有一种方法可以动态地配置生成的特征的名称,那就太好了。我见过{{}}
, !!
,:=
运算符,但我并不能真正区分它们或如何使用它们。
我还使用 timetk 包中的一些现成的功能实现了上述功能,但由于我正在寻找一些额外的灵活性,我想知道如何自己复制这种行为。
library(timetk)
foo %>%
select(date,starts_with('var')) %>%
tk_augment_lags(.value = starts_with("var"),
.lags = 1) %>%
tk_augment_slidify(.value = ends_with("lag1"),
.period = seq(0,24,3)[-1],
.f = mean,
.align = 'right',
.partial = TRUE
)
任何支持将不胜感激。