R中的资产负债表建模

时间:2019-03-21 12:45:50

标签: r modeling financial

我需要为基本资产负债表建模,其中1)最终余额是初始余额加现金流量,并且2)初始余额等于先前的最终余额。 以下代码可以正常工作:

init_balance <- c(0,0,0,0)
cash_flow <- 1:4
final_balance <- c(0,0,0,0)

n <- length (final_balance)
for (i in 1:n) {
  final_balance[i] <- init_balance[i] + cash_flow[i]
  if(i < n) {
    init_balance[i+1] <- final_balance[i]
    }
}

> init_balance
[1]  0  1  3  6
> cash_flow
[1]  1  2  3  4
> final_balance
[1]  1  3  6 10

但是,此实现使用for循环,对我来说听起来并不像R-ish。我发现的所有财务软件包都与财务analisys相关,而不是财务建模。

有人会为这种建模建议其他方法或软件包吗? 谢谢。

2 个答案:

答案 0 :(得分:1)

不需要循环,您真正需要的只是cash_flow来开始:

library(tidyverse)

df <- tibble(
  cash_flow = 1:4
)
df
#> # A tibble: 4 x 1
#>   cash_flow
#>       <int>
#> 1         1
#> 2         2
#> 3         3
#> 4         4

df %>%
  mutate(
    final_balance = cumsum(cash_flow),
    init_balance = lag(final_balance, 1, default = 0)
  )
#> # A tibble: 4 x 3
#>   cash_flow final_balance init_balance
#>       <int>         <int>        <dbl>
#> 1         1             1            0
#> 2         2             3            1
#> 3         3             6            3
#> 4         4            10            6

reprex package(v0.2.1)于2019-03-21创建

您的final_balance只是累计现金流量。对于init_balance,我们将lag中的final_balance使用1个周期(想想之前1个周期);我们还将其默认金额设置为零,而不是NA

答案 1 :(得分:1)

基本的R-ish方式可能看起来像这样。

finance <- data.frame(cash.flow=1:4)

within(finance, {
  final.balance <- cumsum(cash.flow)
  init.balance <- final.balance - cash.flow
})
#   cash.flow init.balance final.balance
# 1         1            0             1
# 2         2            1             3
# 3         3            3             6
# 4         4            6            10

区别在于,此解决方案(以及其他答案的解决方案)是同时使用整个矢量而不是使用每个单个值(可以称为“ R-ish”)来计算的。