#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