Расчет доходности акций в R

#r #dataframe

#r #фрейм данных

Вопрос:

У меня есть фрейм данных с ценой нескольких акций в течение нескольких дней:

 Date Stock_Name Price 1 10-01 A 100 2 10-01 B 5 3 10-01 C 2 4 10-02 A 110 5 10-02 B 10 6 10-02 C 3 7 10-03 A 121 8 10-03 B 20 9 10-03 C 6  

Теперь я хочу сгруппировать каждую акцию по их названиям и рассчитать их ежедневную доходность с 10-01 по 10-03, в идеале:

 Date Stock_Name Price Return 1 10-01 A 100 NA 2 10-01 B 5 NA  3 10-01 C 2 NA 4 10-02 A 110 0.1 5 10-02 B 10 1 6 10-02 C 3 0.5 7 10-03 A 121 0.1 8 10-03 B 20 1 9 10-03 C 6 1   

Как я могу это сделать?

Комментарии:

1. Если вы опубликуете данные в воспроизводимом формате, вы получите ответы быстрее!

2. df %gt;% group_by(Stock_Name) %gt;% mutate(daily_return = round(Price/lag(Price) - 1,digits = 1)) с df вашими данными. Кроме того, не называйте свою новую переменную Return: при закрытии с большой буквы R это имя функции.

3. @MonJeanJean и другие, также не вызывайте свой data.frame df , df также является функцией в базе R, а именно функцией плотности распределения F. 🙂

4. @phiver Хо, не знал, спасибо!

5. Это обычная практика для ТАК называемых df фреймов данных, и это обычная практика публиковать полные решения в ответах, а не в комментариях!

Ответ №1:

Вы можете использовать data.table для этого:

 library(data.table) setDT(dat) dat[, return := (Price / shift(Price) ) -1 , by=Stock_Name] dat