在R中应用函数按组将单行扩展为多行
我试图为一个有3个独立账户的数据框创建一个摊销计划。每个帐户都有一行,详细说明帐户的贷款信息,即起始余额、年利率、贷款期限和每年付款 我想做的是,使用我的数据框架中的贷款信息,创建一个贷款分期偿还计划,以详细说明贷款期间所需的每月付款。下面是一个计算总付款、本金付款和利息付款的函数。我希望将该函数应用于我的数据框中的帐户。我最近的一次尝试是使用在R中应用函数按组将单行扩展为多行,r,R,我试图为一个有3个独立账户的数据框创建一个摊销计划。每个帐户都有一行,详细说明帐户的贷款信息,即起始余额、年利率、贷款期限和每年付款 我想做的是,使用我的数据框架中的贷款信息,创建一个贷款分期偿还计划,以详细说明贷款期间所需的每月付款。下面是一个计算总付款、本金付款和利息付款的函数。我希望将该函数应用于我的数据框中的帐户。我最近的一次尝试是使用dplyr::group_by函数,但我的代码似乎不适用于具有多个帐户的数据帧,而适用于单个帐户 我希望得到一些帮助,我很确定问题在于如何调用函数和分组,
dplyr::group_by
函数,但我的代码似乎不适用于具有多个帐户的数据帧,而适用于单个帐户
我希望得到一些帮助,我很确定问题在于如何调用函数和分组,但我不确定。非常感谢您的帮助!谢谢
q<-data.frame(PersonID=c("A","B","C"),
StartingBalance=c(100,900,500),
AnnualRate=c(.02,.05,.04),
NumberOfPayments=c(60,60,60),
PaymentFrequency=c(12,12,12))
amortisationschedule <- function(amount, annualinterestrate, paymentsperyear, years) {
nper = paymentsperyear * years
rate = annualinterestrate / paymentsperyear
AmortisationSchedule <- tibble(
Principal = map_dbl(1:nper, function(x)
PPMT(rate,
x,
nper,
amount)),
Interest = map_dbl(1:nper, function(x)
IPMT(rate,
x,
nper,
amount))
) %>% mutate(Instalment = Principal + Interest,
Balance = round(amount + cumsum(Principal),2))
return(AmortisationSchedule)
}
q2<-q %>%
group_by(PersonID) %>%
nest(test = c(-PersonID)) %>%
mutate(test = map(quux, amortisationschedule(StartingBalance,AnnualRate,PaymentFrequency,NumberOfPayments))) %>%
unnest(test) %>%
ungroup()
q%
突变(测试=map(quux,摊销计划(起始余额,年利率,支付频率,支付次数)))%>%
未测试(测试)%>%
解组()
您可以使用apply
通过设置MARGIN=1将函数应用于数据帧的每一行。下面是一个示例函数,它获取数据框并返回数据框中每个人的摊销计划列表。它的工作方式是按摊销计划
获取参数的顺序排列列,然后使用apply
对每一行调用函数
amortisation_list=function(dt) {
dt1=relocate(dt, PaymentFrequency, .before=NumberOfPayments) %>%
select(-PersonID)
x=apply(dt1, 1, function(x) {
do.call(amortisationschedule, unname(as.list(unlist(x))))
})
return(x)
}
amortisation_list(q)