Home > front end >  How to calculate IRR function by group
How to calculate IRR function by group

Time:11-10

I'm trying to calculate IRR by group using the package "jrvFinance" - function "irr" but i don't know how.

I have this for only 1 group:

example:

pr1 <- data.frame(idC=1,period = 0:12,
                          cf = c(-10000,1623.8,1630.47,1637.88,1646.09,1655.21,1665.32,1676.54,1688.99,1702.81,1718.14,1735.15,1753.97))


irr1 <- pr1 %>% 
  select(cf) %>%  .[[1]] %>%  irr()
pr1<-pr1 %>%mutate(calculate=irr1)

But i have a data.frame with several groups (idC), how can i get the same result by group in the same data.frame? in this example i only use 2 groups (idC column)

pr1 <- data.frame(idC=1,period = 0:12,
                          cf = c(-10000,1623.8,1630.47,1637.88,1646.09,1655.21,1665.32,1676.54,1688.99,1702.81,1718.14,1735.15,1753.97))

pr2<-data.frame(idC=2,period = 0:12,
                    cf = c(-10000,1555.79,1562.19,1569.22,1576.93,1585.40,1594.7,1604.91,1616.12,1628.43,1641.94,1656.79,1673.02))

full_pr=rbind(pr1,pr2)

result I need for full_pr:

idC period cf calculate
1 0 -10000 0.1263736
1 1 1623.8 0.1263736
1 2 1630.47 0.1263736
1 3 1637.88 0.1263736
1 4 1646.09 0.1263736
1 5 1655.21 0.1263736
1 6 1665.32 0.1263736
1 7 1676.54 0.1263736
1 8 1688.99 0.1263736
1 9 1702.81 0.1263736
1 10 1718.14 0.1263736
1 11 1735.15 0.1263736
1 12 1753.97 0.1263736
2 0 -10000 0.1170392
2 1 1555.79 0.1170392
2 2 1562.19 0.1170392
2 3 1569.22 0.1170392
2 4 1576.93 0.1170392
2 5 1585.4 0.1170392
2 6 1594.7 0.1170392
2 7 1604.91 0.1170392
2 8 1616.12 0.1170392
2 9 1628.43 0.1170392
2 10 1641.94 0.1170392
2 11 1656.79 0.1170392
2 12 1673.02 0.1170392

CodePudding user response:

library(jrvFinance)
library(dplyr)
full_pr <- full_pr %>%
    group_by(idC) %>%
    mutate(calculate = irr(cf)) %>% 
    ungroup

-output

full_pr
# A tibble: 26 × 4
     idC period      cf calculate
   <dbl>  <int>   <dbl>     <dbl>
 1     1      0 -10000      0.126
 2     1      1   1624.     0.126
 3     1      2   1630.     0.126
 4     1      3   1638.     0.126
 5     1      4   1646.     0.126
 6     1      5   1655.     0.126
 7     1      6   1665.     0.126
 8     1      7   1677.     0.126
 9     1      8   1689.     0.126
10     1      9   1703.     0.126
# … with 16 more rows

CodePudding user response:

If I understand your request correctly, this should work.

The purpose of the as.data.frame() at the end is because it changes the data frame to a tibble. You can use print(n = 30) to see additional rows (it will only show 10 as a tibble). I just changed it back to a data frame.

fpr2 <- full_pr %>% group_by(idC) %>% 
  mutate(calculate = irr(cf)) %>% as.data.frame()
#    idC period        cf calculate
# 1    1      0 -10000.00 0.1263736
# 2    1      1   1623.80 0.1263736
# 3    1      2   1630.47 0.1263736
# 4    1      3   1637.88 0.1263736
# 5    1      4   1646.09 0.1263736
# 6    1      5   1655.21 0.1263736
# 7    1      6   1665.32 0.1263736
# 8    1      7   1676.54 0.1263736
# 9    1      8   1688.99 0.1263736
# 10   1      9   1702.81 0.1263736
# 11   1     10   1718.14 0.1263736
# 12   1     11   1735.15 0.1263736
# 13   1     12   1753.97 0.1263736
# 14   2      0 -10000.00 0.1170393
# 15   2      1   1555.79 0.1170393
# 16   2      2   1562.19 0.1170393
# 17   2      3   1569.22 0.1170393
# 18   2      4   1576.93 0.1170393
# 19   2      5   1585.40 0.1170393
# 20   2      6   1594.70 0.1170393
# 21   2      7   1604.91 0.1170393
# 22   2      8   1616.12 0.1170393
# 23   2      9   1628.43 0.1170393
# 24   2     10   1641.94 0.1170393
# 25   2     11   1656.79 0.1170393
# 26   2     12   1673.02 0.1170393 
  •  Tags:  
  • rirr
  • Related