Умножение на совокупный продукт в рамках данных - PullRequest
0 голосов
/ 02 октября 2018

У меня есть один data.frame с четырьмя столбцами: T, Price, Adjustment_factor и Скорректированная цена.Поэтому для столбцов Price и Adjustment_factor я хочу вычислить Adjusted_price, как в таблице ниже.

T      Price     Adjustment_factor       Adjusted_price
----------------------------------------------------
2010    78,974     1,000                      79,01
2012    78,935     1,008                      78,97
2013    78,294     1,081                      78,97
2014    72,436     1,070                      78,97
2015    67,700     1,000                      78,97

Формула для расчета Adjusted_price не одинакова для каждой строки.

E.g For 2015  
         78,97 = 67,700 * (1,070 * 1,081 * 1,008 * 1,000)
    For 2014 
         78,97 =  72,436 * (1,081 * 1,008 * 1,000)
    For 2013 
        78,97 =  78,294 * ( 1,008 * 1,000)

Может кто-нибудь помочь мне с кодом для расчета?

Ответы [ 2 ]

0 голосов
/ 02 октября 2018

Использование @Maurits cumprod и dplyr::lag

library(dplyr)
df %>% 
   mutate(Adjusted_price = Price * lag(cumprod(Adjustment_factor), k=1, default=0))

     T  Price Adjustment_factor Adjusted_price
1 2010 78.974             1.000        0.00000
2 2012 78.935             1.008       78.93500
3 2013 78.294             1.081       78.92035
4 2014 72.436             1.070       78.92974
5 2015 67.700             1.000       78.93301
0 голосов
/ 02 октября 2018

Кажется, вы ищете cumprod.

В базе R:

transform(df, Adjusted_price = Price * cumprod(Adjustment_factor))
#     T  Price Adjustment_factor Adjusted_price
#1 2010 78.974             1.000       78.97400
#2 2012 78.935             1.008       79.56648
#3 2013 78.294             1.081       85.31290
#4 2014 72.436             1.070       84.45482
#5 2015 67.700             1.000       78.93301

Или для записи непосредственно в новый столбец Adjusted_price:

df$Adjusted_price <- df$Price * cumprod(df$Adjustment_factor)

Или tidyverse:

library(tidyverse)
df %>%
    arrange(T) %>%
    mutate(Adjusted_price = Price * cumprod(Adjustment_factor))
#     T  Price Adjustment_factor Adjusted_price
#1 2010 78.974             1.000       78.97400
#2 2012 78.935             1.008       79.56648
#3 2013 78.294             1.081       85.31290
#4 2014 72.436             1.070       84.45482
#5 2015 67.700             1.000       78.93301

Пример данных

df <- read.table(text =
    "T      Price     Adjustment_factor
2010    78.974     1.000
2012    78.935     1.008
2013    78.294     1.081
2014    72.436     1.070
2015    67.700     1.000", header = T)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...