roll mean和sd不包括使用TTR和data.table的实际值

时间:2017-08-05 13:27:38

标签: r data.table

我需要来自特定窗口的均值和sd,不考虑实际值。来自包TTR的runMean和runSD将是完美的,但它们会考虑实际值。例如,使用TTR和data.table:

x<-c(4, 10, 7, 3, 9, 8)
dt<- as.data.table(x)
dt[, ':=' (mean = runMean(x,3), sd = runSD(x,3))]

    x     mean       sd
1:  4       NA       NA
2: 10       NA       NA
3:  7 7.000000 3.000000
4:  3 6.666667 3.511885
5:  9 6.333333 3.055050
6:  8 6.666667 3.214550

但预期结果应为

    x     mean       sd
1:  4       NA       NA
2: 10       NA       NA
3:  7       NA       NA
4:  3 7.000000 3.000000
5:  9 6.666667 3.511885
6:  8 6.333333 3.055050

我认为这将是一种使用data.table的方法,但我不知道如何做到这一点。任何帮助将不胜感激,我正在学习data.table。

1 个答案:

答案 0 :(得分:2)

使用shift函数,如@Frank的注释中所指出的,您可以使用以下方法获得所需的输出:

library(data.table)
library(TTR)
x<-c(4, 10, 7, 3, 9, 8)
dt<- as.data.table(x)
dt[, ':=' (mean = shift(runMean(x,3), 1), sd = shift(runSD(x,3), 1))]

这将给出:

dt
    x     mean       sd
1:  4       NA       NA
2: 10       NA       NA
3:  7       NA       NA
4:  3 7.000000 3.000000
5:  9 6.666667 3.511885
6:  8 6.333333 3.055050