首页 > 解决方案 > 在 R 中同时计算多列的“动态”函数

问题描述

我有一个问题,我完全不知道从哪里/如何开始。我得到了一个如下图所示的数据集。

在图片中,Current列是起始美元余额,Paid是每月支付的金额,并且始终是固定金额,%ofCurrentThatisExtra是除了所需的 10 美元到期之外,预计将支付的Current百分比每行,ExtraPaymentCurrent乘以%ofCurrentThatisExtraOutstandingCurrent减去Paid减去ExtraPayment

我得到了第一行的起始电流(100)。我需要做的是计算ExtraPayment杰出的。再一次,如果你看下图,Current等于 lag Excellence

我需要做的是在 R 中编写一个脚本来执行此操作。但让我难过的是如何正确编写一个函数,该函数将首先计算ExtraPayment然后是完成,然后获取滞后的完成并重新计算下一行的这些列。似乎我需要两个if_else语句同时计算两个不同的列,我不确定这在 R 中是否可行。有人有什么想法吗?

在此处输入图像描述

标签: r

解决方案


使用循环执行此for操作对我来说最有意义。首先,这是数据

dat <- tibble(
  current = c(100, rep(NA, 6)), 
  paid = 10, 
  pct_extra = c(.02,.05,.05,.07, .03, .01, .09), 
  ExtraPayment = NA, 
  Outstanding = NA
)

dat
# # A tibble: 7 x 5
#   current  paid pct_extra ExtraPayment Outstanding
#     <dbl> <dbl>     <dbl> <lgl>        <lgl>      
# 1     100    10      0.02 NA           NA         
# 2      NA    10      0.05 NA           NA         
# 3      NA    10      0.05 NA           NA         
# 4      NA    10      0.07 NA           NA         
# 5      NA    10      0.03 NA           NA         
# 6      NA    10      0.01 NA           NA         
# 7      NA    10      0.09 NA           NA         

现在,完成工作的循环:

for(i in 1:nrow(dat)){
  dat$ExtraPayment[i] <- dat$current[i]*dat$pct_extra[i]
  dat$Outstanding[i] <- dat$current[i] - dat$paid[i] - dat$ExtraPayment[i]
  if(i < nrow(dat)){
    dat$current[(i+1)] <- dat$Outstanding[i]
  }
}

dat
# # A tibble: 7 x 5
#   current  paid pct_extra ExtraPayment Outstanding
#     <dbl> <dbl>     <dbl>        <dbl>       <dbl>
# 1   100      10      0.02        2            88  
# 2    88      10      0.05        4.4          73.6
# 3    73.6    10      0.05        3.68         59.9
# 4    59.9    10      0.07        4.19         45.7
# 5    45.7    10      0.03        1.37         34.4
# 6    34.4    10      0.01        0.344        24.0
# 7    24.0    10      0.09        2.16         11.8

推荐阅读