Создайте индекс кумулятивной доходности из ежемесячной доходности акций

Я все еще новичок в обработке данных-R и изо всех сил пытаюсь найти решение этой проблемы.

Вот как выглядит мой фрейм данных с ежемесячными процентными изменениями:

Month    Security1 Security2 ... SecurityN
1970-01   -2.30%     1.02%         0.64%
1970-02    1.87%    -0.01%         9.50%
1970-03    3.38%     2.33%         5.56%

Я пытаюсь вывести фрейм данных с ежемесячной доходностью каждой ценной бумаги (> 1500 из них), проиндексированной для отображения совокупной доходности, например:

Month    Security1 Security2 ... SecurityN
1970-01     100       100           100
1970-02    101.87    99.99         109.50
1970-03    105.32    102.32        115.59

Я пробовал использовать:

cum.ret <- apply(dataframe, 2, function(x) Return.cumulative(x, geometric = TRUE))

Но это возвращает только то, сколько каждая акция сделала с момента создания: например. Security1 вернул 121%, Security2 вернул 233% и т. д.

Помимо загрузки данных, у меня нет другого кода в блокноте.

Любая помощь будет принята с благодарностью!


person Dan    schedule 15.06.2018    source источник


Ответы (1)


Возможное решение:

mydf[-1] <- lapply(mydf[-1], function(x) as.numeric(sub('%','',x)))
mydf[1,-1] <- 100
mydf[-1] <- lapply(mydf[-1], cumsum)

который дает:

> mydf
    Month Security1 Security2 SecurityN
1 1970-01    100.00    100.00    100.00
2 1970-02    101.87     99.99    109.50
3 1970-03    105.25    102.32    115.06

Используемые данные:

mydf <- read.table(text="Month    Security1 Security2  SecurityN
1970-01   -2.30%     1.02%         0.64%
1970-02    1.87%    -0.01%         9.50%
1970-03    3.38%     2.33%         5.56%", header=TRUE, stringsAsFactors=FALSE)
person Jaap    schedule 15.06.2018
comment
Если бы мои данные имели разные даты начала, как я мог бы применить функцию cumsum, где она основывает индекс на соответствующей дате начала каждой ценной бумаги? например одна безопасность начинается в феврале 1970 года, с базой 100 в январе 1970 года, а другая безопасность начинается в июне 1980 года, с базой в мае 1980 года, и так далее? Заранее спасибо! - person Dan; 22.06.2018