我正在尝试在移动窗口中向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
答案 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循环。
但也许你可以详细说明你想要使这个解决方案更加通用。