想象一下,我有一个名为SP500的XTS对象,我想创建像这样的新列:
SP500$Cierre1 = lag(SP500$Cierre, k=1)
SP500$Cierre2 = lag(SP500$Cierre, k=2)
SP500$Cierre3 = lag(SP500$Cierre, k=3)
SP500$Cierre4 = lag(SP500$Cierre, k=4)
SP500$Cierre5 = lag(SP500$Cierre, k=5)
我想要的是创建这些列的另一种方法,但是在R中使用像这样的变量:
i = 11
SP500$(paste("Cierre",i)) = lag(SP500$Cierre, k=i)
有什么主意吗?
非常感谢您。
答案 0 :(得分:1)
因为您有一个xts对象,仅使用lapply添加列是行不通的。滞后函数的返回是另一个xts对象。合并这些数据的最简单方法是使用合并。
我将举一个可复制的示例,您可以根据自己的需要进行调整。 lapply
与lag
的结合将创建滞后xts对象的列表。这些我们用Reduce
和merge
重新合并到主要的xts对象中。
# use quantmod to get SPY data
library(quantmod)
SPY <- getSymbols("SPY", auto.assign = FALSE)
i <- 3
# use of Cl function to find the close.
# beware of multiple close columns
lagged_data <- lapply(1:i,function(x) lag(Cl(SPY), x))
# name the lagged data
names(lagged_data) <- paste0("close", 1:i)
# use of reduce and merge to combine everything
SPY <- Reduce(merge, lagged_data, SPY)
head(SPY)
SPY.Open SPY.High SPY.Low SPY.Close SPY.Volume SPY.Adjusted SPY.Close.1 SPY.Close.2 SPY.Close.3
2007-01-03 142.25 142.86 140.57 141.37 94807600 111.1660 NA NA NA
2007-01-04 141.23 142.05 140.61 141.67 69620600 111.4019 141.37 NA NA
2007-01-05 141.33 141.40 140.38 140.54 76645300 110.5134 141.67 141.37 NA
2007-01-08 140.82 141.41 140.25 141.19 71655000 111.0245 140.54 141.67 141.37
2007-01-09 141.31 141.60 140.40 141.07 75680100 110.9301 141.19 140.54 141.67
2007-01-10 140.58 141.57 140.30 141.54 72428000 111.2997 141.07 141.19 140.54