Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/73.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R中的滑动归一化窗口_R_Dataframe_Sliding Window - Fatal编程技术网

R中的滑动归一化窗口

R中的滑动归一化窗口,r,dataframe,sliding-window,R,Dataframe,Sliding Window,我有一个数据框,它有7个变量,我想对它们应用一个滚动归一化窗口。我的数据帧没有NA值,所有变量的长度都相同 > head(CK0159U09A3,10) W1 W2 W3 W4 W5 W6 W7 1 1.37853716 0.01316304 -0.1363012 0.6895341 -0.7230930 -0.1310321 -0.4109521 2 -0.73

我有一个数据框,它有7个变量,我想对它们应用一个滚动归一化窗口。我的数据帧没有NA值,所有变量的长度都相同

> head(CK0159U09A3,10)
            W1          W2         W3        W4         W5         W6         W7
1   1.37853716  0.01316304 -0.1363012 0.6895341 -0.7230930 -0.1310321 -0.4109521
2  -0.73032998  0.31212925  0.1654731 0.9187255 -0.8017260 -0.1619631 -0.4243575
3  -0.52130420  0.43831484  0.6088623 1.1183964 -0.8486971 -0.1970389 -0.4368820
4   0.55501096  0.13850401  1.1221211 1.2708212 -0.8701385 -0.2372061 -0.4490060
5  -0.06995122 -0.53842548  1.4592013 1.3581935 -0.8661200 -0.2791726 -0.4608654
6  -0.19984548 -0.78829431  1.4564180 1.3823090 -0.8431200 -0.3184653 -0.4722506
7   0.68935525  0.18733222  1.0158497 1.3344059 -0.8043461 -0.3526886 -0.4825229
8  -0.49540738  0.80663376  0.1774945 1.1800970 -0.7494087 -0.3803636 -0.4901212
9  -0.09501622 -0.17931684 -0.7074083 0.9312984 -0.6801124 -0.4008524 -0.4942994
10 -0.14939548 -0.68153738 -1.2723772 0.6054420 -0.5968207 -0.4149125 -0.4952316
我的窗口大小定义为3

windowSize <- 3
1)如果
DF
是输入的data.frame,则计算滚动平均值,从原始数据帧中减去这些平均值,然后将每列除以相应的sd值。如果不需要NA行,请使用
NA.omit(out)

请注意,此问题的答案与此相关:

修正问题中的公式第1列中的前3个值为:

(1.3785 - (1.378+(-0.7303)+(-0.5213))/3)/sd(DF[, 1])
## [1] 2.057361
(-0.7303 - (-0.7303+(-0.5213)+0.555)/3)/sd(DF[, 1])
## -0.7668342
(-0.5213 - (-0.5213+0.555+(-0.0699))/3)/sd(DF[, 1])
## [1] -0.7839742
2)另一种解决方案是定义一个函数,该函数在单个列上执行所需的操作,然后将其应用于每个列

sapply(DF, function(x) (x - rollmean(x, 3, align = "left", fill = NA))/sd(x))
注:可复制形式的输入为:

Lines <-  " W1          W2         W3        W4         W5         W6         W7
1   1.37853716  0.01316304 -0.1363012 0.6895341 -0.7230930 -0.1310321 -0.4109521
2  -0.73032998  0.31212925  0.1654731 0.9187255 -0.8017260 -0.1619631 -0.4243575
3  -0.52130420  0.43831484  0.6088623 1.1183964 -0.8486971 -0.1970389 -0.4368820
4   0.55501096  0.13850401  1.1221211 1.2708212 -0.8701385 -0.2372061 -0.4490060
5  -0.06995122 -0.53842548  1.4592013 1.3581935 -0.8661200 -0.2791726 -0.4608654
6  -0.19984548 -0.78829431  1.4564180 1.3823090 -0.8431200 -0.3184653 -0.4722506
7   0.68935525  0.18733222  1.0158497 1.3344059 -0.8043461 -0.3526886 -0.4825229
8  -0.49540738  0.80663376  0.1774945 1.1800970 -0.7494087 -0.3803636 -0.4901212
9  -0.09501622 -0.17931684 -0.7074083 0.9312984 -0.6801124 -0.4008524 -0.4942994
10 -0.14939548 -0.68153738 -1.2723772 0.6054420 -0.5968207 -0.4149125 -0.4952316"
DF <- read.table(text = Lines)

行底部两行发生了什么,其中没有两个尾随值?如果您给出预期的输出,这将有所帮助;也许可以手工计算最上面几行的值,这样我们就可以进行验证了。@r2evans,你说得对,我从来没有说过当值小于窗口大小时会发生什么。我已经更新了原来的帖子,声明NAs应该被退回。谢谢你的提醒。非常感谢你的快速回复,这是一个巨大的帮助。
(1.3785 - (1.378+(-0.7303)+(-0.5213))/3)/sd(DF[, 1])
## [1] 2.057361
(-0.7303 - (-0.7303+(-0.5213)+0.555)/3)/sd(DF[, 1])
## -0.7668342
(-0.5213 - (-0.5213+0.555+(-0.0699))/3)/sd(DF[, 1])
## [1] -0.7839742
sapply(DF, function(x) (x - rollmean(x, 3, align = "left", fill = NA))/sd(x))
Lines <-  " W1          W2         W3        W4         W5         W6         W7
1   1.37853716  0.01316304 -0.1363012 0.6895341 -0.7230930 -0.1310321 -0.4109521
2  -0.73032998  0.31212925  0.1654731 0.9187255 -0.8017260 -0.1619631 -0.4243575
3  -0.52130420  0.43831484  0.6088623 1.1183964 -0.8486971 -0.1970389 -0.4368820
4   0.55501096  0.13850401  1.1221211 1.2708212 -0.8701385 -0.2372061 -0.4490060
5  -0.06995122 -0.53842548  1.4592013 1.3581935 -0.8661200 -0.2791726 -0.4608654
6  -0.19984548 -0.78829431  1.4564180 1.3823090 -0.8431200 -0.3184653 -0.4722506
7   0.68935525  0.18733222  1.0158497 1.3344059 -0.8043461 -0.3526886 -0.4825229
8  -0.49540738  0.80663376  0.1774945 1.1800970 -0.7494087 -0.3803636 -0.4901212
9  -0.09501622 -0.17931684 -0.7074083 0.9312984 -0.6801124 -0.4008524 -0.4942994
10 -0.14939548 -0.68153738 -1.2723772 0.6054420 -0.5968207 -0.4149125 -0.4952316"
DF <- read.table(text = Lines)