在 R 中扩展 Window(时间序列预测)
Expanding Window(time series forecasting) in R
嗨,我是 Whosebug 和 R 的新手。我目前正在使用 Rstudio 和 Python 学习机器学习和深度学习课程。在本课程中,他也教授预测,他只使用 Python 来实现这些代码。在预测的特征工程部分,他正在实施扩展 Window 特征,这是 Pandas 的一部分。谁能帮我在 R 中找到这段代码。
他在python中使用的密码是Feature['Expand_Max']=df['births'].expanding().max()
数据集在 运行 这段代码之前看起来像这样:
日期
出生
年
月
天
滞后 1
滞后2
Roll_mean
Roll_max
1959-01-01
35
1959
1
1
不适用
不适用
不适用
不适用
1959-01-02
32
1959
1
2
35
不适用
33.5
不适用
1959-01-03
30
1959
1
3
32
不适用
31.0
35
1959-01-04
31
1959
1
4
30
不适用
30.5
32
1959-01-05
44
1959
1
5
31
不适用
37.5
44
1959-01-06
29
1959
1
6
44
不适用
36.5
44
1959-01-07
45
1959
1
7
29
不适用
37.0
45
1959-01-08
43
1959
1
8
45
不适用
44.0
45
1959-01-09
38
1959
1
9
43
不适用
40.5
45
1959-01-10
27
1959
1
10
38
不适用
32.5
43
在运行这段代码之后数据集看起来像这样:
他在python中使用的密码是Feature['Expand_Max']=df['births'].expanding().max()
日期
出生
年
月
天
滞后 1
滞后2
Roll_mean
Roll_max
Expand_Max
1959-01-01
35
1959
1
1
不适用
不适用
不适用
不适用
35
1959-01-02
32
1959
1
2
35
不适用
33.5
不适用
35
1959-01-03
30
1959
1
3
32
不适用
31.0
35
35
1959-01-04
31
1959
1
4
30
不适用
30.5
32
35
1959-01-05
44
1959
1
5
31
不适用
37.5
44
44
1959-01-06
29
1959
1
6
44
不适用
36.5
44
44
1959-01-07
45
1959
1
7
29
不适用
37.0
45
45
1959-01-08
43
1959
1
8
45
不适用
44.0
45
45
1959-01-09
38
1959
1
9
43
不适用
40.5
45
45
1959-01-10
27
1959
1
10
38
不适用
32.5
43
45
您可以将 zoo::na.locf
与 fromLast = TRUE
一起使用,这将用列中最后一个非 NA 值填充 NA
值,cummax
将 return 每个点的累积最大值。
df$Roll_max <- cummax(zoo::na.locf(df$Roll_max, fromLast = TRUE))
df$Roll_max
#[1] 35 35 35 35 44 44 45 45 45 45
我们可以使用
library(data.table)
setDT(df)[, Roll_max := cummax(nafill(Roll_max, type = "nocb"))]
嗨,我是 Whosebug 和 R 的新手。我目前正在使用 Rstudio 和 Python 学习机器学习和深度学习课程。在本课程中,他也教授预测,他只使用 Python 来实现这些代码。在预测的特征工程部分,他正在实施扩展 Window 特征,这是 Pandas 的一部分。谁能帮我在 R 中找到这段代码。
他在python中使用的密码是Feature['Expand_Max']=df['births'].expanding().max()
数据集在 运行 这段代码之前看起来像这样:
日期 | 出生 | 年 | 月 | 天 | 滞后 1 | 滞后2 | Roll_mean | Roll_max |
---|---|---|---|---|---|---|---|---|
1959-01-01 | 35 | 1959 | 1 | 1 | 不适用 | 不适用 | 不适用 | 不适用 |
1959-01-02 | 32 | 1959 | 1 | 2 | 35 | 不适用 | 33.5 | 不适用 |
1959-01-03 | 30 | 1959 | 1 | 3 | 32 | 不适用 | 31.0 | 35 |
1959-01-04 | 31 | 1959 | 1 | 4 | 30 | 不适用 | 30.5 | 32 |
1959-01-05 | 44 | 1959 | 1 | 5 | 31 | 不适用 | 37.5 | 44 |
1959-01-06 | 29 | 1959 | 1 | 6 | 44 | 不适用 | 36.5 | 44 |
1959-01-07 | 45 | 1959 | 1 | 7 | 29 | 不适用 | 37.0 | 45 |
1959-01-08 | 43 | 1959 | 1 | 8 | 45 | 不适用 | 44.0 | 45 |
1959-01-09 | 38 | 1959 | 1 | 9 | 43 | 不适用 | 40.5 | 45 |
1959-01-10 | 27 | 1959 | 1 | 10 | 38 | 不适用 | 32.5 | 43 |
在运行这段代码之后数据集看起来像这样:
他在python中使用的密码是Feature['Expand_Max']=df['births'].expanding().max()
日期 | 出生 | 年 | 月 | 天 | 滞后 1 | 滞后2 | Roll_mean | Roll_max | Expand_Max |
---|---|---|---|---|---|---|---|---|---|
1959-01-01 | 35 | 1959 | 1 | 1 | 不适用 | 不适用 | 不适用 | 不适用 | 35 |
1959-01-02 | 32 | 1959 | 1 | 2 | 35 | 不适用 | 33.5 | 不适用 | 35 |
1959-01-03 | 30 | 1959 | 1 | 3 | 32 | 不适用 | 31.0 | 35 | 35 |
1959-01-04 | 31 | 1959 | 1 | 4 | 30 | 不适用 | 30.5 | 32 | 35 |
1959-01-05 | 44 | 1959 | 1 | 5 | 31 | 不适用 | 37.5 | 44 | 44 |
1959-01-06 | 29 | 1959 | 1 | 6 | 44 | 不适用 | 36.5 | 44 | 44 |
1959-01-07 | 45 | 1959 | 1 | 7 | 29 | 不适用 | 37.0 | 45 | 45 |
1959-01-08 | 43 | 1959 | 1 | 8 | 45 | 不适用 | 44.0 | 45 | 45 |
1959-01-09 | 38 | 1959 | 1 | 9 | 43 | 不适用 | 40.5 | 45 | 45 |
1959-01-10 | 27 | 1959 | 1 | 10 | 38 | 不适用 | 32.5 | 43 | 45 |
您可以将 zoo::na.locf
与 fromLast = TRUE
一起使用,这将用列中最后一个非 NA 值填充 NA
值,cummax
将 return 每个点的累积最大值。
df$Roll_max <- cummax(zoo::na.locf(df$Roll_max, fromLast = TRUE))
df$Roll_max
#[1] 35 35 35 35 44 44 45 45 45 45
我们可以使用
library(data.table)
setDT(df)[, Roll_max := cummax(nafill(Roll_max, type = "nocb"))]