Добавление вектора обратно в качестве дополнительного столбца файла xts

Я впервые занимаюсь кодированием — и не в финансах. Просто пытаюсь выучить Р.

Я попытался рассчитать разницу в цене закрытия для исторических данных в Google. Проблема в том, что для применения функции (и я уверен, что для этого уже есть много готовых функций) я мог заставить ее работать, только преобразовав столбец скорректированной цены файла xts в вектор.

Я получил то, что хотел, но теперь я застрял с вектором, который не могу объединить обратно в файл xts для поиска конкретных дат:

getSymbols("GOOG")
head(GOOG)
z = as.vector(GOOG$GOOG.Adjusted)

D2D = function (x) {
                days = length(x)
                delta = numeric(days)
                for(i in 2:days){
                  delta[i] <- (100*((x[i] - x[i - 1])/(x[i - 1])))
                }
                delta
}
DELTA = D2D(z)
summary(DELTA)
GOOG_DELTA = append(0,DELTA)
merge(GOOG,GOOG_DELTA)

Любые советы будут оценены.


r xts
person Antoni Parellada    schedule 19.10.2014    source источник


Ответы (2)


Нет необходимости создавать пользовательскую функцию для этого, xts и quantmod уже имеют встроенную векторизованную функцию для этого. Я думаю, вы ищете это:

merge(GOOG,Ad((GOOG-lag(GOOG,1))/(lag(GOOG,1))))
person agstudy    schedule 19.10.2014

Между тем, я думаю, что очень специфический способ предотвращения проблемы, с которой я столкнулся, - это преобразовать файл xts в целом в data.frame (вместо разделения вектора-столбца); выполнение операций над data.frame и в конце слияние результатов с исходными xts.

Вот возможный способ, который работает (ПРИМЕЧАНИЕ: я дал среднее значение первой строке вместо «NA»):

getSymbols("GOOG")
str(GOOG) #We start with an xts
z = as.data.frame(GOOG$GOOG.Adjusted)
head(z)
D2D = function (x) {
                days = nrow(x)
                delta = numeric(days)
                for(i in 2:days){
                  delta[i] <- (100*((x[i,1] - x[i - 1,1])/(x[i - 1,1])))
                }
                delta
}
DELTA = D2D(z)
head(DELTA)
DELTA[1]<-mean(DELTA)
head(DELTA)
summary(DELTA)
GOOG_D2D = merge(GOOG,DELTA)
str(GOOG_D2D) #And we end with an xts file!
person Antoni Parellada    schedule 19.10.2014