在R

时间:2019-03-13 19:26:46

标签: r

我有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()内的表达式求值。

感谢您的帮助。

1 个答案:

答案 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)                      
                      })
               )