- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在寻找一种使用 rollapply 将系列拆分为 n 个月的序列的方法。假设您有以下内容:
z <- zoo(101:465, as.Date(1:365))
as.data.frame(z)
我想获取每个 n 个月的索引值向量列表(或列表),以便我可以处理数据...很像宽度参数在 rollapply 中实现,除了在这种情况下的宽度是变量(取决于一个月中的天数)。
注意:更喜欢 base-R 解决方案,但很高兴看到可以使用的其他库
最佳答案
如果您正在寻找的是您对问题的回答中的代码描述的处理,那么您正在寻找的最好描述为聚合而不是函数的滚动应用程序。
要获得每个月、每个季度和每个 n 个月的平均值,请使用 aggregate.zoo
:
myfun <- mean
aggregate(z, as.yearmon, myfun)
## Jan 1970 Feb 1970 Mar 1970 Apr 1970 May 1970 Jun 1970 Jul 1970 Aug 1970
## 115.5 144.5 174.0 204.5 235.0 265.5 296.0 327.0
## Sep 1970 Oct 1970 Nov 1970 Dec 1970 Jan 1971
## 357.5 388.0 418.5 449.0 465.0
aggregate(z, as.yearqtr, myfun)
## 1970 Q1 1970 Q2 1970 Q3 1970 Q4 1971 Q1
## 145.0 235.0 326.5 418.5 465.0
n <- 3
aggregate(z, as.Date(cut(index(z), paste(n, "months"))), myfun)
## 1970-01-01 1970-04-01 1970-07-01 1970-10-01 1971-01-01
## 145.0 235.0 326.5 418.5 465.0
或使用 as.yearmon
代替 as.Date
.在上面mean
可以用任意函数替换。
a) 如果你真的想翻过 n 个月,那么创建一个动物园对象 ag
每月一行,31 列在短短几个月内用 NA 填充额外的列。然后运行 rollapplyr
具有将每次迭代的数据分解为一个长向量的函数,删除在短月份结束时添加的 NA,并将其输入我们的任意函数。
n <- 3
myfun <- mean
ag <- aggregate(z, as.yearmon, "length<-", value = 31)
rollapplyr(ag, n, function(x) myfun(na.omit(c(t(x)))), fill = NA, by.column = FALSE)
## Jan 1970 Feb 1970 Mar 1970 Apr 1970 May 1970 Jun 1970 Jul 1970 Aug 1970
## NA NA 145.0 175.0 204.5 235.0 265.5 296.5
## Sep 1970 Oct 1970 Nov 1970 Dec 1970 Jan 1971
## 326.5 357.5 388.0 418.5 434.5
b)另一种可能性是:
s <- split(z, as.yearmon(index(z)))
r <- rollapplyr(seq_along(s), n, function(ix) myfun(unlist(s[ix])), fill = NA)
zoo(r, as.yearmon(names(s), "%b %Y"))
## Jan 1970 Feb 1970 Mar 1970 Apr 1970 May 1970 Jun 1970 Jul 1970 Aug 1970
## NA NA 145.0 175.0 204.5 235.0 265.5 296.5
## Sep 1970 Oct 1970 Nov 1970 Dec 1970 Jan 1971
## 326.5 357.5 388.0 418.5 434.5
以下工作均值,但取决于您的任意函数是什么,它们可能可以修改以使用它。
a) 首先,创建一个 2 列的动物园对象 ag
其行是每个月的总和和长度,然后使用 rollapplyr
n <- 3
ag2 <- aggregate(z, as.yearmon, function(x) c(sum(x), length(x)))
rollapplyr(ag2, 3, function(x) sum(x[, 1]) / sum(x[, 2]), fill = NA, by.column = FALSE)
## Jan 1970 Feb 1970 Mar 1970 Apr 1970 May 1970 Jun 1970 Jul 1970 Aug 1970
## NA NA 145.0 175.0 204.5 235.0 265.5 296.5
## Sep 1970 Oct 1970 Nov 1970 Dec 1970 Jan 1971
## 326.5 357.5 388.0 418.5 434.5
b) 或者另一种选择是创建一个复杂的动物园对象 ag3
其实部和虚部是每个月的总和和天数以及使用rollapplyr
对此:
ag3 <- aggregate(z, as.yearmon, function(x) complex(real = sum(x), imag = length(x)))
rollapplyr(ag3, 3, function(x) sum(Re(x)) / sum(Im(x)), fill = NA)
## Jan 1970 Feb 1970 Mar 1970 Apr 1970 May 1970 Jun 1970 Jul 1970 Aug 1970
## NA NA 145.0 175.0 204.5 235.0 265.5 296.5
## Sep 1970 Oct 1970 Nov 1970 Dec 1970 Jan 1971
## 326.5 357.5 388.0 418.5 434.5
关于rollapply() 由 n 个月,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54834356/
我有一个数据集,其中的观测值间隔不等,而且观测值每天发生不止一次。我想对我的数据窗口应用一个函数,但我希望窗口按时间而不是按行定义。例如,我想计算数据集中第 1-5 天、第 2-6 天等的平均值,第
我正在尝试使用 rollapply 以便我只使用它一次,而不是多次使用然后合并结果。这个想法是我想从 xts 对象中获取多位数据。在下面的模拟示例中,我希望能够获得滑动窗口的总和和最大值。 requi
我想使用滚动窗口生成协方差矩阵(和均值向量)。但在我所有的尝试中 rollapply堆叠来自 cov 的协方差矩阵并且用完预分配的空间(例如,如果我的原始数据有 40 个观察值,那么 rollappl
我正在尝试计算移动窗口的一些统计数据,并在 zoo 包中使用 rollapply。我的问题是如何让 rollapply 将该函数应用于前 n 次观测而不是当前观测和前 n-1 次观测,因为 ali
# Loading packages require(forecast) require(quantmod) # Loading OHLC xts object getSymbols('SPY', f
我有一个大型数据库,我已将其拆分为多个文件。每个文件都保存在同一个目录中,命名方案中有一个数字序列,以保持数据库的顺序。我这样做是为了减少加载和操作数据库所需的时间和内存。我想按顺序开始分析数据库,我
已结束。此问题不符合 Stack Overflow guidelines .它目前不接受答案。 要求代码的问题必须表明对正在解决的问题的最低理解。包括尝试的解决方案、它们为什么不起作用以及预期结果。另
我有 10000+ 行的动物园对象。 > head(tt) A B 2007-01-04 0.005945924 0.00211
我正在寻找一种使用 rollapply 将系列拆分为 n 个月的序列的方法。假设您有以下内容: z <- zoo(101:465, as.Date(1:365)) as.data.frame(z) 我
我正在通过 quantmod 研究一些雅虎财务数据。 我如何不仅确定数据滚动窗口中的最高和最低价格,而且还确定这些高点和低点的确切时间戳?我已经尝试使用 rollapply 尝试 which.max(
我正在尝试从满足特定条件的向量中提取一系列值。为了说明这一点,想象一下我有以下向量: a limit) {ctr = ctr+1} else {ctr} } res <- res[!sapp
我正在寻找一种使用 rollapply 将系列拆分为 n 个月的序列的方法。假设您有以下内容: z <- zoo(101:465, as.Date(1:365)) as.data.frame(z) 我
我有一列每小时数据,想使用 rollapply 计算每小时的 24 小时滚动平均值。我的数据包含 NA,如果 24 小时内 75% 的数据可用,我只想计算滚动平均值,否则我希望考虑 24 滚动平均值
require(quantmod) require(PerformanceAnalytics) getSymbols('INTC') x<- monthlyReturn(INTC) rollapply
是否有使用 data.table 分组计算滚动统计数据的现有习惯用法? 例如,给定以下代码: DT = data.table(x=rep(c("a","b","c"),each=2), y=c(1,3
我有一个 rollapply 函数,它可以做一些非常简单的事情,但是超过百万个数据点这个简单的函数非常慢。我想知道是否可以向 rollapply 提供有关如何进行下一次转换的信息,而不是定义函数本身。
我的第一个问题:) 我的目标是:给定一个带有预测变量的数据框(每列一个预测变量/行观察值)使用 lm 拟合回归,然后使用滚动窗口使用最后一个观察值来预测值。 数据框如下所示: > DfPredicto
我有一个 rollapply 函数,它可以做一些非常简单的事情,但是超过百万个数据点这个简单的函数非常慢。我想知道是否可以向 rollapply 提供有关如何进行下一次转换的信息,而不是定义函数本身。
我设计了自己的函数,名为 SharpeRatio(data) 其中 data 是一个 nx2 矩阵。 该函数适用于给定的矩阵数据,但是当我尝试使用 rollapply(dat, 20, SharpeR
这个问题在这里已经有了答案: 8年前关闭。 Possible Duplicate: Can `ddply` (or similar) do a sliding window? 是否有像 rollapp
我是一名优秀的程序员,十分优秀!