Как создать динамические столбцы в XTS - PullRequest
0 голосов
/ 07 ноября 2018

Представьте, что у меня есть объект XTS с именем SP500, и я хотел бы создать новые столбцы, например:

SP500$Cierre1 = lag(SP500$Cierre, k=1)
SP500$Cierre2 = lag(SP500$Cierre, k=2)
SP500$Cierre3 = lag(SP500$Cierre, k=3)
SP500$Cierre4 = lag(SP500$Cierre, k=4)
SP500$Cierre5 = lag(SP500$Cierre, k=5)

Мне нужен еще один способ создания этих столбцов, но с использованием такой переменной в R:

i = 11

SP500$(paste("Cierre",i)) = lag(SP500$Cierre, k=i)

Есть идеи?

Заранее большое спасибо.

1 Ответ

0 голосов
/ 07 ноября 2018

Поскольку у вас есть объект xts, просто добавление столбцов с помощью lapply не будет работать. Возвратом функций задержки является еще один объект xts. Самый простой способ объединить эти данные - использовать слияние.

Я приведу воспроизводимый пример, который вы можете настроить в соответствии со своими потребностями. lapply в сочетании с lag создаст список объектов с задержкой XTS. Эти мы объединяем обратно в основной объект XTS с Reduce и merge.

# use quantmod to get SPY data
library(quantmod)

SPY <- getSymbols("SPY", auto.assign = FALSE)

i <- 3
# use of Cl function to find the close.
# beware of multiple close columns
lagged_data <- lapply(1:i,function(x) lag(Cl(SPY), x))
# name the lagged data
names(lagged_data) <- paste0("close", 1:i)

# use of reduce and merge to combine everything
SPY <- Reduce(merge, lagged_data, SPY)

head(SPY)

           SPY.Open SPY.High SPY.Low SPY.Close SPY.Volume SPY.Adjusted SPY.Close.1 SPY.Close.2 SPY.Close.3
2007-01-03   142.25   142.86  140.57    141.37   94807600     111.1660          NA          NA          NA
2007-01-04   141.23   142.05  140.61    141.67   69620600     111.4019      141.37          NA          NA
2007-01-05   141.33   141.40  140.38    140.54   76645300     110.5134      141.67      141.37          NA
2007-01-08   140.82   141.41  140.25    141.19   71655000     111.0245      140.54      141.67      141.37
2007-01-09   141.31   141.60  140.40    141.07   75680100     110.9301      141.19      140.54      141.67
2007-01-10   140.58   141.57  140.30    141.54   72428000     111.2997      141.07      141.19      140.54
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...