Нахождение минимума за определенный период времени;И если этот минимум равен NA, используйте дату непосредственно перед - PullRequest
0 голосов
/ 02 октября 2019

У меня есть датафрейм, содержащий цены на акции (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 строк ниже, поскольку выходные не включены). Как я могу сослаться на эту расплывчатую дату?

...