Функция NPV с использованием оператора группы dplyrs - PullRequest
0 голосов
/ 17 июня 2019

Я пытаюсь group_by ID и выполнить вычисление NPV из пакета FinancialMath (или создать NPV самостоятельно).

Данные выглядят следующим образом:

    ID         CF otherVar date
1   78   83739.63     0.00 1989
2  100   21421.77     0.00 1989
3  987   89581.94 46926.38 1989
4 1934 2921150.05  5597.58 1989
5   78   83739.63     0.00 1989
6  100   21421.77     0.00 1989

Где CF - денежные потоки.

Я пытаюсь

data %>%
  group_by(ID) %>%
  mutate(npv = NPV("date == 1989" then "date == 1992"...))

, но я не знаю, как представить данные в расчете NPV.

i <- c(0.03, 0.03, 0.04, 0.01, 0.02)

library(FinancialMath)
#The NPV function takes the arguments:
NPV(cf0,cf,times,i,plot=FALSE)

Любая помощь будет отличной.

Данные:

data <- structure(list(ID = c(78, 100, 987, 1934, 78, 100, 987, 1934, 
78, 100, 987, 1934, 78, 100, 987, 1934, 78, 100, 987, 1934, 78, 
100, 987, 1934, 2938, 78, 100, 987, 1934, 2938, 78, 100, 987, 
1934, 2938, 78, 100, 987, 1934, 2938, 78, 100, 987, 1934, 2938, 
78, 100, 987, 1934, 2938, 78, 100, 987, 1934, 2938, 78, 100, 
987, 1934, 2938, 78, 100, 987, 1934, 2938, 78, 100, 987, 1934, 
2938, 78, 100, 987, 1934, 2938, 78, 100, 987, 1934, 2938, 78, 
100, 987, 1934, 2938, 78, 100, 987, 1934, 2938, 78, 100, 987, 
1934, 2938, 78, 100, 987, 1934, 2938, 78, 100, 987, 1934, 2938, 
78, 100, 987, 1934, 2938, 78, 100, 987, 1934, 2938, 78, 100, 
987, 1934, 2938), CF = c(83739.6348934691, 21421.7670657712, 
89581.9350023158, 2921150.05442334, 83739.6348934691, 21421.7670657712, 
89581.9350023158, 2921150.05442334, 83739.6348934691, 21421.7670657712, 
89581.9350023158, 2921150.05442334, 83739.6348934691, 21421.7670657712, 
89581.9350023158, 2921150.05442334, 83739.6348934691, 21421.7670657712, 
89581.9350023158, 2921150.05442334, 36094.1785878537, 49844.341859417, 
103126.224536725, 1481580.09251095, 17187.7040894541, 36094.1785878537, 
49844.341859417, 103126.224536725, 1481580.09251095, 17187.7040894541, 
36094.1785878537, 49844.341859417, 103126.224536725, 1481580.09251095, 
17187.7040894541, 36094.1785878537, 49844.341859417, 103126.224536725, 
1481580.09251095, 17187.7040894541, 36094.1785878537, 49844.341859417, 
103126.224536725, 1481580.09251095, 17187.7040894541, 11065.7431065623, 
97827.5839855509, 259804.403371463, 19244.7706201084, 83394.0060204696, 
5613.05809753161, 97827.5839855509, 259804.403371463, 19244.7706201084, 
83394.0060204696, 9943.13148705599, 97827.5839855509, 259804.403371463, 
19244.7706201084, 83394.0060204696, 13952.4586995786, 97827.5839855509, 
259804.403371463, 19244.7706201084, 83394.0060204696, 7697.90824804335, 
97827.5839855509, 259804.403371463, 19244.7706201084, 83394.0060204696, 
483026.595362645, 16449.8221330932, 672.947269081084, 2646925.92505227, 
249738.208747869, 876326.888181145, 31404.2058904506, 672.947269081084, 
6011662.27045769, 273665.222759641, 912217.409198803, 28413.3291389791, 
672.947269081084, 3215192.50783185, 320023.812407449, 856886.189296581, 
32899.6442661863, 672.947269081084, 7058469.13347271, 158516.467827989, 
480035.718611173, 14954.3837573574, 672.947269081084, 5413486.92016339, 
608643.418924447, 58523.7787123908, 156063.409899709, 41802.6990802791, 
164423.949715765, 94752.7845819661, 57130.3554097148, 156063.409899709, 
41802.6990802791, 164423.949715765, 94752.7845819661, 58523.7787123908, 
157456.833202385, 41802.6990802791, 164423.949715765, 94752.7845819661, 
57130.3554097148, 157456.833202385, 41802.6990802791, 164423.949715765, 
94752.7845819661, 58523.7787123908, 157456.833202385, 41802.6990802791, 
164423.949715765, 94752.7845819661), otherVar = c(0, 0, 46926.3808521831, 
5597.58022093635, 0, 0, 46926.3808521831, 5597.58022093635, 0, 
0, 46926.3808521831, 5597.58022093635, 0, 0, 46926.3808521831, 
5597.58022093635, 0, 0, 46926.3808521831, 5597.58022093635, 3773.40425531915, 
58026.5721040189, 148420.567375887, 922387.706855792, 8385.34278959811, 
3773.40425531915, 58026.5721040189, 148420.567375887, 922387.706855792, 
8385.34278959811, 3773.40425531915, 58026.5721040189, 148420.567375887, 
922387.706855792, 8385.34278959811, 3773.40425531915, 58026.5721040189, 
148420.567375887, 922387.706855792, 8385.34278959811, 3773.40425531915, 
58026.5721040189, 148420.567375887, 922387.706855792, 8385.34278959811, 
0, 111186.313465784, 186197.924944812, 50112.1412803532, 96935.6732891832, 
0, 111186.313465784, 185054.741721854, 50112.1412803532, 96935.6732891832, 
0, 111186.313465784, 186260.565121413, 50112.1412803532, 96935.6732891832, 
0, 111186.313465784, 185571.523178808, 50112.1412803532, 96935.6732891832, 
0, 111186.313465784, 185133.041942605, 50112.1412803532, 96935.6732891832, 
900029.118136439, 0, 0, 462655.541805324, 0, 568051.164725458, 
0, 0, 496059.163477537, 0, 522311.980033278, 0, 0, 399829.082986689, 
0, 752483.361064892, 0, 0, 431831.757695507, 0, 522311.980033278, 
0, 0, 447496.690723794, 0, 514.843391902215, 350906.417112299, 
84000.7639419404, 208647.058823529, 0, 514.843391902215, 350906.417112299, 
84000.7639419404, 252002.291825821, 0, 514.843391902215, 350906.417112299, 
84000.7639419404, 173420.932009167, 0, 514.843391902215, 350906.417112299, 
84000.7639419404, 136839.954163484, 0, 514.843391902215, 350906.417112299, 
84000.7639419404, 283163.865546218, 0), date = c(1989, 1989, 
1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 
1989, 1989, 1989, 1989, 1989, 1989, 1989, 1992, 1992, 1992, 1992, 
1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 
1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1995, 
1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 
1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 
1995, 1995, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 
1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 
1998, 1998, 1998, 1998, 1998, 2001, 2001, 2001, 2001, 2001, 2001, 
2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 
2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001)), row.names = c(NA, 
-120L), .internal.selfref = <pointer: 0x0000000002621ef0>, class = "data.frame")

1 Ответ

3 голосов
/ 17 июня 2019

Это должно быть выполнено путем расчета коэффициента дисконтирования для каждой строки и использования его для дисконтирования каждого денежного потока.В этом случае я делаю дисконтирование еще до первого года (т. Е. Какова была чистая приведенная стоимость в 1989 году), но мне не было ясно, ищите ли вы это.Если вы хотите найти текущую стоимость в текущих деньгах, предполагая rate постоянного дохода, замените min(date) на базовый год по вашему выбору.

rate = 0.05
data %>%
  mutate(period = date - min(date),
         discount = 1 / (1+rate) ^ period,
         CF_disc = CF * discount) %>%
  group_by(ID) %>%
  summarize(NPV = sum(CF_disc))

# A tibble: 5 x 2
     ID       NPV
  <dbl>     <dbl>
1    78  3098073.
2   100  1204245.
3   987  1981237.
4  1934 37228043.
5  2938  1687395.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...