[英]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.