Расчет по одной строке фрейма данных с другой строкой для расчета доходности в R - PullRequest
0 голосов
/ 24 апреля 2018

У меня есть следующий набор примеров данных, который имеет много строк и столбцов. Я пытаюсь сделать расчет ежемесячной прибыли. Я сделал это в прошлом с помощью Excel, но не могу найти решение для этого.

RETURNS = (THIS_MONTH_PRICE / PREVIOUS_MONTH_PRICE) - 1

DF1 = Date Price Stock<br> 1 1/31/2011 339.32 AAPL 2 2/28/2011 353.21 AAPL 3 3/31/2011 348.45 AAPL 4 4/29/2011 348.23 AAPL 5 5/31/2011 347.83 AAPL 6 6/30/2011 335.67 AAPL 7 7/29/2011 390.48 AAPL 8 8/31/2011 384.83 AAPL ВЫВОД:

DF2= Date Price Stock RETURNS<br> 1 1/31/2011 339.32 AAPL NA 2 2/28/2011 353.21 AAPL 0.040934811 3 3/31/2011 348.45 AAPL 0.040934811 4 4/29/2011 348.23 AAPL 0.040934811 5 5/31/2011 347.83 AAPL 0.040934811 6 6/30/2011 335.67 AAPL 0.040934811 7 7/29/2011 390.48 AAPL 0.16328537 8 8/31/2011 384.83 AAPL -0.014469371

Может кто-нибудь помочь мне в решении этого. Спасибо.

Ответы [ 2 ]

0 голосов
/ 24 апреля 2018

Если вас интересует решение с использованием только базы R:

> DF1$RETURNS <- (df$Price / c(0, head(df$Price, -1))) - 1
> DF1
       Date  Price Stock       RETURNS
1 1/31/2011 339.32  AAPL           Inf
2 2/28/2011 353.21  AAPL  0.0409348108
3 3/31/2011 348.45  AAPL -0.0134764021
4 4/29/2011 348.23  AAPL -0.0006313675
5 5/31/2011 347.83  AAPL -0.0011486661
6 6/30/2011 335.67  AAPL -0.0349596067
7 7/29/2011 390.48  AAPL  0.1632853696
8 8/31/2011 384.83  AAPL -0.0144693710
0 голосов
/ 24 апреля 2018

Мы можем использовать функцию lag из пакета .

library(dplyr)

df2 <- df1 %>% mutate(RETURNS = Price/lag(Price) - 1)

df2
#        Date  Price Stock       RETURNS
# 1 1/31/2011 339.32  AAPL            NA
# 2 2/28/2011 353.21  AAPL  0.0409348108
# 3 3/31/2011 348.45  AAPL -0.0134764021
# 4 4/29/2011 348.23  AAPL -0.0006313675
# 5 5/31/2011 347.83  AAPL -0.0011486661
# 6 6/30/2011 335.67  AAPL -0.0349596067
# 7 7/29/2011 390.48  AAPL  0.1632853696
# 8 8/31/2011 384.83  AAPL -0.0144693710

DATA

df1 <- read.table(text = "           Date Price   Stock
                  1   '1/31/2011'   339.32  AAPL
                  2   '2/28/2011'   353.21  AAPL
                  3   '3/31/2011'   348.45  AAPL
                  4   '4/29/2011'   348.23  AAPL
                  5   '5/31/2011'   347.83  AAPL
                  6   '6/30/2011'   335.67  AAPL
                  7   '7/29/2011'   390.48  AAPL
                  8   '8/31/2011'   384.83  AAPL",
                  header = TRUE, stringsAsFactors = FALSE)
...