我试图使用lag函数在xts对象中创建一个滞后向量。 它在使用$ notation(例如x.ts$r1_lag )在xts对象中定义新向量时x.ts$r1_lag ,但在使用方括号定义新变量时也是如此,即xts[,"r1_lag"] 。 见下面的代码:
library(xts) x <- data.frame(date=seq(as.Date('2015-01-01'), by='days', length=100), runif(1e2), runif(1e2), runif(1e2)) colnames(x) <- c("date", "r1", "r2", "r3") #the following command works x.ts <- xts(x, order.by=x$date) x.ts$r1_lag <- lag(x.ts$r1) # but the following does not (says subscript is out of bounds) x.ts <- xts(x, order.by=x$date) x.ts[,"r1_lag"] <- lag(x.ts[,"r1"])我需要使用[]符号而不是$符号来引用向量,因为如果我想对多个xts对象中的向量运行滞后变换(多个xts对象列表中的向量),我无法定义新的使用$表示法在对象内的向量,即我不能使用下面的程式化循环中的符号来定义新向量:
for (i in letters) { for (j in variables) { macro.set.ts$i$paste(j,"_L1",sep="") <- lag(macro.set.ts[[i]][,j]) macro.set.ts$i$paste(j,"_L2",sep="") <- lag(macro.set.ts[[i]][,j], 2) macro.set.ts$i$paste(j,"_L4",sep="") <- lag(macro.set.ts[[i]][,j], 4) } }谢谢!
I am trying to create a lagged vector within an xts object using the lag function. It works when defining the new vector within the xts object using $ notation (e.g. x.ts$r1_lag), but it does when defining the new variable using square brackets, i.e. xts[,"r1_lag"]. See code below:
library(xts) x <- data.frame(date=seq(as.Date('2015-01-01'), by='days', length=100), runif(1e2), runif(1e2), runif(1e2)) colnames(x) <- c("date", "r1", "r2", "r3") #the following command works x.ts <- xts(x, order.by=x$date) x.ts$r1_lag <- lag(x.ts$r1) # but the following does not (says subscript is out of bounds) x.ts <- xts(x, order.by=x$date) x.ts[,"r1_lag"] <- lag(x.ts[,"r1"])I need to use [] notation rather than $ notation to reference the vectors because if I want to run the lag transformation on vectors in more than one xts object (vectors within a list of multiple xts objects), I can't define the new vectors within the objects using $ notation, i.e. I cant define the new vectors using the notation in the below stylized loop:
for (i in letters) { for (j in variables) { macro.set.ts$i$paste(j,"_L1",sep="") <- lag(macro.set.ts[[i]][,j]) macro.set.ts$i$paste(j,"_L2",sep="") <- lag(macro.set.ts[[i]][,j], 2) macro.set.ts$i$paste(j,"_L4",sep="") <- lag(macro.set.ts[[i]][,j], 4) } }Thanks!
最满意答案
你不需要使用[<-.xts 。 您可以使用merge :
for (i in letters) { for (j in variables) { # create all lags mst_ij <- macro.set.ts[[i]][,j] jL <- merge(lag(mst_ij), lag(mst_ij, 2), lag(mst_ij, 4)) colnames(jL) <- paste(j, c("L1","L2","L4"), sep="_") # merge back with original data macro.set.ts[[i]] <- merge(macro.set.ts[[i]], jL) } }You don't need to use [<-.xts. You can use merge instead:
for (i in letters) { for (j in variables) { # create all lags mst_ij <- macro.set.ts[[i]][,j] jL <- merge(lag(mst_ij), lag(mst_ij, 2), lag(mst_ij, 4)) colnames(jL) <- paste(j, c("L1","L2","L4"), sep="_") # merge back with original data macro.set.ts[[i]] <- merge(macro.set.ts[[i]], jL) } }更多推荐
发布评论