Pascal是正确的,你会这样做就像你在data.frame上操作一样.这是一个例子:
library(xts) Ex <- xts(1:10, Sys.Date()+1:10) names(Ex) <- "a" Ex$b <- (Ex$a*lag(Ex$a))+Ex$a Ex$c <- lag(Ex$b)
以上产生以下内容:
## a b c ## 2015-12-25 1 NA NA ## 2015-12-26 2 4 NA ## 2015-12-27 3 9 4 ## 2015-12-28 4 16 9 ## 2015-12-29 5 25 16 ## 2015-12-30 6 36 25 ## 2015-12-31 7 49 36 ## 2016-01-01 8 64 49 ## 2016-01-02 9 81 64 ## 2016-01-03 10 100 81编辑:回答编辑的问题
要创建一个d1 = a3的列,只需将函数中的对象更改为矩阵即可正常工作.也许有人可以填补空白为什么,但至少它现在有效.
shift <- function(x, n){ xMat <- as.matrix(x) c(xMat[-(seq(n))], rep(NA, n)) } Ex$d <- shift(Ex$a, 2)
这会产生:
## a b c d ## 2015-12-26 1 NA NA 3 ## 2015-12-27 2 4 NA 4 ## 2015-12-28 3 9 4 5 ## 2015-12-29 4 16 9 6 ## 2015-12-30 5 25 16 7 ## 2015-12-31 6 36 25 8 ## 2016-01-01 7 49 36 9 ## 2016-01-02 8 64 49 10 ## 2016-01-03 9 81 64 NA ## 2016-01-04 10 100 81 NA