Я пытаюсь создать запаздывающий вектор в объекте xts с помощью функции 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)
}
}
Спасибо!
Сторона примечания: почему у вас есть столбец даты в ваших xts? вы должны иметь только числовые столбцы и использовать дату в качестве индекса.В противном случае вы не будете получать прибыль от использования 'xts' (в вашем примере это всего лишь своего рода матрица символов) – agstudy