如何在R语言中向左平移xts时间序列列?解决lag参数报错问题
解决xts时间序列向左平移的问题
要实现xts序列的向左平移(超前对齐),你需要注意xts包的lag()函数与base包的差异,以下是两种可行方案:
方法1:明确调用lag.xts()并传入负参数
xts专属的lag.xts()支持负数k值,负数代表向左平移(超前),刚好对应你需要的与滚动均值对齐的需求。修改代码中平移的行:
y$lag <- lag.xts(y$rolling, k = -200) # 向左平移200期,对应n/2=200
方法2:使用shift()函数(更直观)
xts的shift()函数专门用于序列平移,通过type="lead"指定向左平移:
y$lag <- shift(y$rolling, n = 200, type = "lead")
完整修正后的代码
#rm(list=ls()) #dev.off(dev.list()["RStudioGD"]) library(roll) library(xts) # 显式加载xts,避免函数冲突 getSymbols("^GSPC", src="yahoo", from="2015-01-01", to = "2020-06-04") standardize <- function(ts) { as.xts(ts / coredata(ts)[1]) } # 简化标准化函数 y <- standardize(GSPC$GSPC.Close) n <- 400 y$m <- rollmean(y$GSPC.Close, k = n) y$rolling <- roll_sd(y$GSPC.Close, n) y$lag <- lag.xts(y$rolling, k = -n/2) # 向左平移n/2期 plot(y) ts.plot(y, col=1:4)
关键说明
- 你的滚动均值
y$m使用rollmean()默认的align="center"(中心对齐),向左平移n/2期后,滚动标准差的数值会刚好与对应窗口的均值位置匹配。 - 避免函数冲突:如果你的环境中加载了多个包(如zoo、base),显式调用
lag.xts()或shift()能确保使用xts的平移逻辑,不会触发base包lag()的参数限制。
内容的提问来源于stack exchange,提问作者Ray Tayek
相关产品推荐
相关产品推荐

