r - 在 R 中同时计算多列的“动态”函数
问题描述
我有一个问题,我完全不知道从哪里/如何开始。我得到了一个如下图所示的数据集。
在图片中,Current列是起始美元余额,Paid是每月支付的金额,并且始终是固定金额,%ofCurrentThatisExtra是除了所需的 10 美元到期之外,预计将支付的Current百分比每行,ExtraPayment是Current乘以%ofCurrentThatisExtra,Outstanding是Current减去Paid减去ExtraPayment。
我得到了第一行的起始电流(100)。我需要做的是计算ExtraPayment和杰出的。再一次,如果你看下图,Current等于 lag Excellence。
我需要做的是在 R 中编写一个脚本来执行此操作。但让我难过的是如何正确编写一个函数,该函数将首先计算ExtraPayment然后是未完成,然后获取滞后的未完成并重新计算下一行的这些列。似乎我需要两个if_else
语句同时计算两个不同的列,我不确定这在 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
推荐阅读
- c++ - 为什么我们不能从 C++ 中的函数通过引用返回对象?
- java - java - 从excel导入mysql
- android - 处理多个同名类型的 JSON 响应
- javascript - 在脚本域的JS中设置cookie
- ruby-on-rails - 不允许的参数:嵌套表单
- java - 即使在 ant 中使用 -lib 标志,也无法为 groovy 创建 javax 脚本引擎
- c++ - 按引用传递或按值传递指针容器之间的区别
- c++ - 使用 lldb 调试 Rcpp
- node.js - 无论我做什么,npm run build 都会失败
- python - 截断一个大数组(A = A[:N])——原来的 A 会被清除吗?我可以“摆脱” A[:N].base 并“转让所有权”吗?