我有37个时间序列,每个序列有9列。 我想落后于这9列中的3列。
假设我的时间序列名为TS1.xts,...,TS37.xts,我想这样做
TS1.xts$col1 <- lag.xts( TS1.xts$col1 )
TS1.xts$col1 <- lag.xts( TS1.xts$col1 )
TS1.xts$col3 <- lag.xts( TS1.xts$col3 )
从逻辑上讲,我没有写过37篇文章。我有一个清单
time.series <- c('TS1', ... , 'TS37')
我试图
for(ts in time.series){
assign(paste0(ts, '.xts$col1'), lag.xts( parse(text=paste0(ts, '.xts$col1'))));
assign(paste0(ts, '.xts$col2'), lag.xts( parse(text=paste0(ts, '.xts$col2'))));
assign(paste0(ts, '.xts$col3'), lag.xts( parse(text=paste0(ts, '.xts$col3')))); }
但是R不断抛出以下错误:'}'在“}”中意外。
我不明白这意味着什么,我也不知道如何以任何其他方式来执行此代码。我还尝试使用lag.xts()
eval()
内的表达式求值。
感谢您的帮助。
答案 0 :(得分:0)
请考虑在get()
内使用lapply
从环境中按名称检索对象,然后更新每一项的前三列。结果将是一个等于 time.series 且具有修改后的对象的列表。
time.series <- paste0("TS", 1:37, ".xts")
lag_TS_list <- lapply(time.series, function(ts)
within(get(ts), {
col1 <- lag.xts(col1)
col2 <- lag.xts(col2)
col3 <- lag.xts(col3)
})
)
或者使用mget()
检索项目列表并遍历对象:
TS_list <- mget(paste0("TS", 1:37, ".xts"))
lag_TS_list <- lapply(TS_list, function(ts)
within(ts, {
col1 <- lag.xts(col1)
col2 <- lag.xts(col2)
col3 <- lag.xts(col3)
})
)