rollapply输出两列或多列
我正在尝试使用rollapply,以便只使用一次,而不是多次,然后合并结果。我的想法是希望从rollapply输出两列或多列,r,xts,R,Xts,我正在尝试使用rollapply,以便只使用一次,而不是多次,然后合并结果。我的想法是希望从xts对象中获取多个数据位。在下面的模拟示例中,我希望能够获得滑动窗口的总和和最大值 require(xts) v <- xts(rnorm(100),Sys.Date()-100:1) rollapply(v,width=10,function(y){c(sum(y),max(y))}) 下面是我正在运行的sessionInfo: R version 2.15.2 (2012-10-26) Pl
xts
对象中获取多个数据位。在下面的模拟示例中,我希望能够获得滑动窗口的总和和最大值
require(xts)
v <- xts(rnorm(100),Sys.Date()-100:1)
rollapply(v,width=10,function(y){c(sum(y),max(y))})
下面是我正在运行的sessionInfo:
R version 2.15.2 (2012-10-26)
Platform: i386-apple-darwin9.8.0/i386 (32-bit)
locale:
[1] en_GB.UTF-8/en_GB.UTF-8/en_GB.UTF-8/C/en_GB.UTF-8/en_GB.UTF-8
attached base packages:
[1] stats graphics grDevices utils datasets methods base
other attached packages:
[1] xts_0.9-3 zoo_1.7-9
loaded via a namespace (and not attached):
[1] grid_2.15.2 lattice_0.20-10
我想我以前就已经弄明白了,但显然没有……这是一种方法
sapply( c("sum" , "max" ) , function(x) rollapply( v , width = 10 , FUN = eval(x) , align = "left" ) )
# sum max
# [1,] -2.43662744 1.6931489
# [2,] -1.95346657 1.6931489
# [3,] -0.66191032 1.6931489
# [4,] -1.97506474 1.6931489
# [5,] -3.12090491 1.6931489
# [6,] -6.32315512 0.6908325
# [7,] -3.09130768 2.4151086
# [8,] -1.27864497 2.4151086
# [9,] -0.20942059 2.4151086
# [10,] -0.39156830 2.4151086
当输入只有一列时,这是当前实现的一个限制。您可以通过确保输入有多个列、将
设置为by.column=FALSE
、调整函数以仅使用一列来解决此问题
例如:
require(xts)
v <- xts(rnorm(10),Sys.Date()-10:1)
f <- function(y) c(sum=sum(y[,1]), max=max(y[,1]))
rollapply(merge(v,v), width=3, f, by.column=FALSE)
require(xts)
v我认为它仍然在使用该方法运行两次rollapply
,而且在我的实际示例中,这些函数比简单的sum
和max
要复杂得多,因此,不要认为它会起作用……如果您首先定义函数,那么它应该起作用,函数只需要从列中获取值。你为什么不试试呢。是的,它运行了两次rollapply,对于您要评估的每个函数运行一次。如果这还不够,那么给出一个你想要运行的函数和足够运行它的数据的例子。是的,我想你可以这样做…但是更大的问题是执行两次rollappy
我的数据集相当大…同样在你的示例输出中…你似乎没有日期/时间索引。。。,其中asrollapply
确实有一个函数……我知道它很容易修复……但请让您知道……好的,我不知道您是否可以在rollappy
中同时应用两个函数(我相信您必须能够!),要获得时间戳,只需将索引(v)
添加到sapply
中的匿名函数中即可。干杯我认为你“必须”也能…并且希望得到一个快速的答案…但是必须等待,看看那些贡献者能提供什么…如果你用as.zoo(v)
替换rollappy(v,…)
中的as.zoo(v)
,那么它就可以工作了,我收到错误消息:错误在
rownames@G.Grothendieck我在
行中遇到了错误,对不起。试试这个:z谢谢!我可以一直依靠你,约书亚!出于好奇,这个小限制是否会很快得到纠正,以便它能够处理单列输入?@h.l.m:我将其添加到功能请求跟踪器中,但我无法告诉你我(或其他人)何时会实际修补它。
require(xts)
v <- xts(rnorm(10),Sys.Date()-10:1)
f <- function(y) c(sum=sum(y[,1]), max=max(y[,1]))
rollapply(merge(v,v), width=3, f, by.column=FALSE)