如何在 R 中随着时间的推移迭代不同的 ID?

How do I iterate over time for different IDs in R?

我正在尝试在 R 中对资产随时间贬值进行建模。我有一个数据集 df=tibble(expand_grid(id=1:2, time=1:10), assets=id * 5000),并且想要显示每个 id 在每个时期下降 250 的资产。我试过了

input_data %>%
 group_by(id) %>%
 mutate(assets = case_when(time > 1 ~ lag(assets) - 250, TRUE ~ assets))

但这并没有按照我想要的方式迭代。我也尝试过使用 for 循环,但我只知道如何为第一个 ID 执行此操作 -

for (i in 2:max(input_data$time)) {
   input_data$assets[i] <- input_data$assets[i-1] - 250
}

关于如何为每个 ID 执行 for 循环所执行的相同操作,我真的很想得到建议 - 输入数据集应该有大约 100 个 ID,以便循环遍历它们或拆分数据集并将 for 循环应用于每个组,会有所帮助。我特别感谢使用 tidyverse 函数的答案,因为我更了解它们。

谢谢!我希望这已经足够清楚了。

我想这就是你想要的。我创建了一个序列 assets_drop 以确保此代码在时间为日期时也能正常工作。

input_data %>% 
  group_by(id) %>% 
  mutate(assets_drop = seq(0, length.out = n(), by = 250), 
         assets_new = assets - assets_drop)

输出为

# A tibble: 20 x 5
# Groups:   id [2]
      id  time assets assets_drop assets_new
   <int> <int>  <dbl>       <dbl>      <dbl>
 1     1     1   5000           0       5000
 2     1     2   5000         250       4750
 3     1     3   5000         500       4500
 4     1     4   5000         750       4250
 5     1     5   5000        1000       4000
 6     1     6   5000        1250       3750
 7     1     7   5000        1500       3500
 8     1     8   5000        1750       3250
 9     1     9   5000        2000       3000
10     1    10   5000        2250       2750
11     2     1  10000           0      10000
12     2     2  10000         250       9750
13     2     3  10000         500       9500
14     2     4  10000         750       9250
15     2     5  10000        1000       9000
16     2     6  10000        1250       8750
17     2     7  10000        1500       8500
18     2     8  10000        1750       8250
19     2     9  10000        2000       8000
20     2    10  10000        2250       7750

与@tivd 的方法类似,这里我定义每个时期的折旧,然后计算所有先前折旧的总和,然后将资产重新定义为其原始价值减去该点的折旧。

df %>% 
  group_by(id) %>%
  mutate(deprec_period = 250,
         deprec = pmin(assets, cumsum(lag(deprec_period, default = 0))),
         assets = assets - deprec)