2012-01-17 113 views
-1

我想向移动窗口中的xts对象添加一个额外的列。 这是我的原始数据R中的移动窗口

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 

回答

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循环。

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

+0

Paul,感谢您的回复。我有一个时间序列,其长度取决于我选择的开始和结束日期。因此在上面的例子中,如果我可以用-nrow(x)替代-4,那将解决我的问题。 – itcplpl 2012-01-17 20:16:31

+1

@itcplpl:因为最后一行是零,是否需要'-nrow(x)+ 1'? – 2012-01-17 20:24:29

+0

编辑我的答案。如果这解决了您的问题,您可以通过勾选刻度标记将其标记为正确答案吗?向人展示问题已解决恩让我有些代表;)。 – 2012-01-17 21:23:38