У меня есть датафрейм, содержащий цены на акции (Adj.Price) разных компаний (PERMNO) за два года (2000 и 2001). Он также содержит дату и номер торгового дня (который в основном просто рассчитывается по датам):
PERMNO date Adj.Price day
<int> <date> <dbl> <drtn>
1 10001 2000-03-13 5.21 1 days
2 10001 2000-03-14 5.25 2 days
3 10001 2000-03-15 5.17 3 days
4 10001 2000-03-16 5.17 4 days
5 10001 2000-03-17 5.5 5 days
6 10001 2000-03-20 5.17 8 days
7 10001 2000-03-21 5.38 9 days
8 10001 2000-03-22 5.38 10 days
9 10001 2000-03-23 5.25 11 days
10 10001 2000-03-24 5.33 12 days
# ... with 3,690,264 more rows
Я хочу рассчитать доходность от цен первого дня (или date = 2000-03-13) до дня с самой низкой ценой на акции в 2000 году для каждого PERMNO. С
Crisis_Return <- stock_prices %>% group_by(PERMNO) %>% summarize(stock_return = min(Adj.Price)/Adj.Price[day==1]-1)
я могу создать новый фрейм данных, который даст мне возврат между первым днем и общей минимальной ценой. Но это также включает цены с 2001 года. Для самой низкой цены я хочу только цены с 2000 года (то есть дата = <2000-12-29 или день = <292). Как я могу ограничить «поиск минимума» этим периодом времени? </p>
Кроме того, иногда последняя цена акций PERMNO указывается с NA (поскольку компания исключена из списка или обанкротилась). В этом случае формула, которую я использую, идентифицирует NA как минимум и в результате даст мне NA в качестве возврата. Вместо этого я хочу рассчитать доходность до последнего дня, когда у компании есть действительная цена акций (то есть строка перед NA). Есть ли способ сделать это?
Кроме того, когда все это работает, я также хотел бы рассчитать доходность между той же минимальной ценой акций, как указано выше, и ценой акций дня ровно через 6 месяцев после (так6 * 28 = 168 дней после или 6 * 20 = 120 строк ниже, поскольку выходные не включены). Как я могу сослаться на эту расплывчатую дату?