2013-08-27 46 views
0

我想要實現以下rollscale函數:縮放(中心和歸一化,即減去mu和除以sigma)數據集x,但不是使用全局的musigma來執行它們,而是在滾動窗口內對所看到的數據進行計算。我提出了以下內容,但不知道如何在第三個rollapplyr上定義函數參數,即如何知道當前位置是什麼?如何使用zoo :: rollapply來創建`rollscale`實現?

library(zoo) 
rollscale <- function(x, k) { 
    mu <- rollapplyr(x, k, mean) 
    sigma <- rollapplyr(x, k, sd) 
    x <- rollapplyr(x, k, function(x) ???)    
} 

簡單的尺度函數是:

scale <- function(x) { 
    mu <- mean(x) 
    sigma <- sd(x) 
    x <- (x - mu)/sigma   
} 
+2

爲什麼不使用'rollapplyr(x,k,scale)'? –

+0

相當不錯的主意! :D沒有想到有規模,如果我只是想說兩倍西格瑪的標準化呢? :)好的,你確定你給了我答案。請回答,我會接受。 –

回答

1

你讓這個比它更復雜的。您有一個scale函數,並且您想要在滾動基礎上應用它。這正是rollapply所做的!

scale <- function(x) { 
    mu <- mean(x) 
    sigma <- sd(x) 
    x <- (x - mu)/sigma   
} 
scaled.data <- rollapplyr(Data, 5, scale) 
+0

還要注意R中已經有一個'scale'函數,所以你不需要再次定義它。 –

相關問題