2017-08-05 58 views
1

我需要不考虑实际值的特定窗口中的均值和sd。 TTR软件包中的runMean和runSD将是完美的,但它们会考虑实际值。例如,使用TTR和data.table:滚动平均值和sd不包括使用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

我得到'runMean( x,3)# [1]不适用7.000000 6.666667 6.333333 6.666667因此,您不清楚为什么您认为data.table的做法不同 – akrun

+0

在第一种情况下,7是(4,10,7 )它包含实际值x = 7。在第二种情况下,7是相同值的平均值(4,10,7),但x的实际值是3. – Chene

+0

请参阅data.table包中的'?shift'。 – Frank

回答

1

使用移位功能,如通过@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 
+0

谢谢,这正是我一直在寻找的。 – Chene