Как зациклить функцию xirr в r по нескольким идентификаторам - PullRequest
1 голос
/ 02 мая 2019

Я хочу рассчитать IRR (используя функцию xirr из пакета tvm) для каждого идентификатора в таблице, где каждый идентификатор имеет различное количество строк.Я считаю, что должен использовать первое вхождение до последнего вхождения-1, но после этого я не уверен, что делать.У кого-нибудь есть предложения?

Ниже приведен пример фрейма данных, для которого я попытался использовать как функцию суммирования в dplyr с функцией xirr, так и написать цикл for.Безуспешно.

exampledf<-data.frame(c(2, 2, 2, 3, 3, 3, 3, 3), c("2017-11-30", "2017-12-31", "2018-01-31", "2017-11-30", "2017-12-31", "2018-01-31", "2018-02-28", "2018-03-31"), c(-65000, 33000, 33000, -40000, 10250, 10250, 10000, 10500))
names(exampledf)<-c("ID","Date","CashFlow")


exampledf %>% group_by(ID) %>% summarise(
  IRR = xirr(cf = exampledf$CashFlow, d = exampledf$Date, tau = NULL, comp_freq = 12, interval = c(-1, 10)))

Ожидаемые результаты должны быть примерно такими:

     ID   IRR
1     2 0.127
2     3 0.125

В настоящее время при запуске функции суммирования возвращается одинаковый IRR для обоих идентификаторов, что не должно иметь место.Моя попытка с циклом for также не удалась, любая помощь здесь будет оценена!

1 Ответ

1 голос
/ 02 мая 2019

Нам нужно удалить example$ в summarise, так как example$ выберет весь столбец вместо CashFlow в каждом «ID».Кроме того, тип столбца «Дата» должен быть изменен на Date

library(dplyr)
library(tvm)
exampledf %>%
  mutate(Date = as.Date(Date)) %>%
  group_by(ID) %>% 
   summarise(
   IRR = xirr(cf =CashFlow, d = Date, 
      tau = NULL, comp_freq = 12, interval = c(-1, 10)))
# A tibble: 2 x 2
#     ID   IRR
#  <dbl> <dbl>
#1     2 0.121
#2     3 0.119
...