R基于同一列中先前值的累积计算

R Cumulative calculation based on prior values in the same column

这就是我的数据框的样子。 V3 是我想要的专栏。 V3 我不可用。

library(data.table)
dt <- fread('

Level  V1  V2  
  0    10  2     
  1     0  3     
  1     0  2    
  1     0  2 ')

我正在尝试根据 V3 的先前值计算 V3。 V3公式为:

New Value of V3 =((Prior Value of V3+ Prior Value of V3*V2)*Level)+V1
1st Row V3 = (NA+NA*3)*1 + 10 = 10
2nd Row V3 = (10+10*3)*1 + 0 =40
3rd Row V3 = (40+40*2)*1 + 0 =120
4th Row V3  = (120+120*2)*1 + 0 = 360

输出应如下所示。

Level  V1  V2  V3
  0    10  2   10  
  1     0  3   40  
  1     0  2   120 
  1     0  2   360

我正在尝试:

dt[,V3:= (cumsum(V3+V3*V2)*Level)+V1]

这是 dplyr

中的一种方法
dt %>% 
  mutate(V4=lag(V3) + lag(V3)*V2 + V1,
         V4=ifelse(is.na(V4), 0, V4))

  Level V1 V2  V3  V4
1     0 10  2  10   0
2     1  0  3  40  40
3     1  0  2 120 120
4     1  0  2 360 360

data.table

之内
dt[,{ lag.V3=c(0, V3[-.N]) ; V3 = (lag.V3 + lag.V3 * V2 )* Level + V1 }]

输出

[1]  10  40 120 360

我在评论中修改了您的努力以获得预期的结果:

 dt[,V3:=cumprod( c(V1[1] ,(Level*(1 + V2))[-1]) ) ]
 dt

   Level V1 V2  V3
1:     0 10  2  10
2:     1  0  3  40
3:     1  0  2 120
4:     1  0  2 360

我实际上并没有收到 dt[V3:= V1[1] * cumprod((Level*(1 + V2))[-1])] 的错误(只有警告)。使用 [-1] 缩短了没有扩展名的 cumprod,并导致回收。