我需要来自特定窗口的均值和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。
答案 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