【问题标题】:How to use values from another column in the proceeding row in R while iterating?迭代时如何使用 R 中前一行中另一列的值?
【发布时间】:2022-12-17 18:58:03
【问题描述】:

我试图在几年内进行迭代,其中我有一个初始值和一些随时间变化的成本,具体取决于前几年的最终值。我正在尝试迭代成本和最终值的计算。

也就是说,首先根据初始值计算成本,然后减去这些成本并确定今年的最终值成为明年的初始值,并计算该期间的成本,然后再次减去 n迭代。

那么,如何将去年的最终值(来自上一行)作为今年的初始值?

`

year <- 1


cost_function <- function(year) {
  period_costs <- (year * 1000 + year ^ 3)
  return(period_costs)
}

df <- tibble(year = 1:10, 
             initial_value = c(50000, "-", "-", "-", "-", "-", "-", "-", "-", "-"),
             cost = cost_function(year)
            ) 
view(df)

`

在此示例中,第 1 年的成本为 1001,因此第 1 年的最终值应为 48999,这将成为第 2 年的初始值。我将如何在 R 中对此进行编码?

我已经尝试过 mutates 但没有用。我已经考虑过 map 函数的操作顺序,但要使用它们,我仍然需要调用我不知道该怎么做的前一年的最终值。

【问题讨论】:

    标签: r finance


    【解决方案1】:

    你可以使用

    library(dplyr)
    
    df %>% 
      mutate(value = as.numeric(first(initial_value)) - cumsum(cost))
    

    要得到

    # A tibble: 10 x 4
        year initial_value  cost value
       <int> <chr>         <dbl> <dbl>
     1     1 50000          1001 48999
     2     2 -              2008 46991
     3     3 -              3027 43964
     4     4 -              4064 39900
     5     5 -              5125 34775
     6     6 -              6216 28559
     7     7 -              7343 21216
     8     8 -              8512 12704
     9     9 -              9729  2975
    10    10 -             11000 -8025
    

    笔记: 你的cost_function可以简化为

    cost_function <- function(year) {
      year * 1000 + year ^ 3
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-06-21
      • 2017-07-17
      • 2020-08-31
      • 2022-01-03
      • 2017-12-31
      • 1970-01-01
      相关资源
      最近更新 更多