在 R 中平衡 sheet 建模
Balance sheet modeling in R
我需要建立一个基本余额模型 sheet,其中 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。我发现的所有财务包都与财务分析有关,而不是财务建模。
有人会为这种建模建议另一种方法或包吗?
谢谢。
无需循环,您真正需要的只是 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
,我们使用 final_balance
的 lag
1 个周期(想想之前的 1 个周期);我们还将其默认金额设置为零,而不是 NA
。
基本的 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"。
我需要建立一个基本余额模型 sheet,其中 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。我发现的所有财务包都与财务分析有关,而不是财务建模。
有人会为这种建模建议另一种方法或包吗?
谢谢。
无需循环,您真正需要的只是 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
,我们使用 final_balance
的 lag
1 个周期(想想之前的 1 个周期);我们还将其默认金额设置为零,而不是 NA
。
基本的 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"。