2017-08-05 27 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