簡體   English   中英

在R中的動物園時間序列上移動窗口

[英]Moving window over zoo time series in R

在將移動窗口函數應用於時間序列數據集時遇到問題。 我已將每日流量數據(日期和值)導入到Zoo對象中,如下所示:

library(zoo)
df <-  data.frame(sf = c("2001-04-01", "2001-04-02", "2001-04-03", "2001-04-04", 
                         "2001-04-05", "2001-04-06", "2001-04-07", "2001-06-01", 
                         "2001-06-02", "2001-06-03", "2001-06-04", "2001-06-05", 
                         "2001-06-06"), 
                      cfs = abs(rnorm(13)))
zoodf <- read.zoo(df, format = "%Y-%m-%d")

由於我想計算每個月的3天最低移動量,因此我使用rollapply定義了一個函數:

f.3daylow <- function(x){rollapply(x, 3, FUN=min, align = "center")}

然后,我使用聚合:

aggregate(zoodf, by=as.yearmon, FUN=f.3daylow)

這將立即返回錯誤消息:

Error in zoo(df, ix[!is.na(ix)]) : 
  “x” : attempt to define invalid zoo object

問題似乎在於每個月中數據點的數量不相等,因為使用相同的數據框並附加6月的日期會導致正確的響應。 關於如何處理此問題的任何建議將不勝感激!

好的,那么您可能正在考慮這樣的事情。 它將每個月的結果粘貼到一個數據點中,以便可以在聚合函數中將其返回。 否則,您也可以看看?aggregate.zoo以獲取一些更精確的數據操作。

f.3daylow <- function(x){paste(rollapply(x, 3, FUN=min, 
               align = "center"),  collapse=", ")}

data <- aggregate(zoodf, by=as.yearmon, FUN=f.3daylow)

返回時,這是一個3的滾動窗口,復制到1個數據點中。 要對其進行分析,最終您將不得不再次對其進行分解,因此不建議這樣做。

Apr 2001 
0.124581285281643, 0.124581285281643, 0.124581285281643,
0.342222172241979, 0.518874882033892 
June 2001 
0.454158221843514, 0.454158221843514, 0.656966528249837,
0.513613009234435 

最終,您可以通過strsplit(data[1],", ")再次對其進行strsplit(data[1],", ") ,但是有關更多詳細信息,請參見將逗號分隔的條目轉換為列

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM