簡體   English   中英

如何隨時間迭代 R 中的不同 ID?

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

我正在嘗試 model 資產在 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)

output 是

# 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)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM