在 R 中的动物园时间序列上移动 window
Moving window over zoo time series in R
我 运行 在将移动 window 函数应用于时间序列数据集时遇到了问题。我已将每日流量数据(日期和值)导入到动物园对象中,近似值如下:
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)
这会及时returns一条错误信息:
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)
Returns,这是将 3 个复制到 1 个数据点的滚动 window。要分析它,最终还是要分解一遍,所以不推荐。
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],", ")
再次将其剪切,但请参阅 Convert comma separated entry to columns 了解更多详情。
我 运行 在将移动 window 函数应用于时间序列数据集时遇到了问题。我已将每日流量数据(日期和值)导入到动物园对象中,近似值如下:
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)
这会及时returns一条错误信息:
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)
Returns,这是将 3 个复制到 1 个数据点的滚动 window。要分析它,最终还是要分解一遍,所以不推荐。
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],", ")
再次将其剪切,但请参阅 Convert comma separated entry to columns 了解更多详情。