如何在多个 ID 上循环 r 中的 xirr 函数
How to loop the xirr function in r over multiple ID's
我想为 table 中的每个 ID 计算 IRR(使用包 tvm 中的 xirr 函数),其中每个 ID 具有不同的行数。我相信我必须使用 first occurrence to last occurrence-1,但在那之后,我不确定该怎么做。有没有人有什么建议?
我在下面发布了一个示例数据框,为此我尝试使用 dplyr 中的 summarize 函数和函数 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
目前,当 运行 汇总函数时,它 returns 两个 ID 的 IRR 相同,但事实并非如此。我对 for 循环的尝试也没有成功,这里的任何帮助将不胜感激!
我们需要删除 summarise
中的 example$
,因为 example$
将 select 整个列而不是每个 [=18] 中的 'CashFlow' =].此外,'Date' 列类型应更改为 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
我想为 table 中的每个 ID 计算 IRR(使用包 tvm 中的 xirr 函数),其中每个 ID 具有不同的行数。我相信我必须使用 first occurrence to last occurrence-1,但在那之后,我不确定该怎么做。有没有人有什么建议?
我在下面发布了一个示例数据框,为此我尝试使用 dplyr 中的 summarize 函数和函数 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
目前,当 运行 汇总函数时,它 returns 两个 ID 的 IRR 相同,但事实并非如此。我对 for 循环的尝试也没有成功,这里的任何帮助将不胜感激!
我们需要删除 summarise
中的 example$
,因为 example$
将 select 整个列而不是每个 [=18] 中的 'CashFlow' =].此外,'Date' 列类型应更改为 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