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,并导致回收。
这就是我的数据框的样子。 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,并导致回收。