在R中移动窗口

时间:2012-01-17 19:21:17

标签: r xts

我正在尝试在移动窗口中向xts对象添加一个额外的列。 这是我原来的数据

2010-09-08 15:02:00 9105 9115 9105  9115     20    
2010-09-08 15:04:00 9120 9120 9105  9120     77    
2010-09-08 15:08:00 9120 9125 9120  9125     86    
2010-09-08 15:11:00 9120 9120 9120  9120      7    
2010-09-08 15:14:00 9120 9125 9110  9125     43 

我想在末尾添加一列以获得以下输出:

2010-09-08 15:02:00 9105 9115 9105  9115     20     -1
2010-09-08 15:04:00 9120 9120 9105  9120     77     -2
2010-09-08 15:08:00 9120 9125 9120  9125     86     -3
2010-09-08 15:11:00 9120 9120 9120  9120      7     -4
2010-09-08 15:14:00 9120 9125 9110  9125     43      0

我写了以下代码,

   x<-x[order(x[,1])]
   window<-nrow(x)
   k<-0

   for (i in 1:nrow(x)) {
   result<-cbind(x[i,],k) #tried result[i], but got an error
   k=-i
   } 
   return(result)

但它只返回最后一行,而且列号为-4而不是0

 2010-09-08 15:14:00 9120 9125 9110  9125     43      -4

1 个答案:

答案 0 :(得分:2)

当我们创建一个包含几列的随机data.frame时:

dat = data.frame(x = runif(5), y = runif(5), z = runif(5))

添加所需的列非常简单:

dat$new = c(-1:-(nrow(dat) - 1), 0)
> dat
           x         y          z new
1 0.23164856 0.1244782 0.04444403  -1
2 0.02956714 0.1166311 0.68492965  -2
3 0.55612567 0.5486006 0.50465624  -3
4 0.98814715 0.2224405 0.26576011  -4
5 0.24729992 0.1294572 0.27477560   0

这里重要的是思考矢量化,不需要for循环。

但也许你可以详细说明你想要使这个解决方案更加通用。