【发布时间】:2016-11-08 00:18:23
【问题描述】:
这就是我的数据框的样子。 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]
【问题讨论】:
-
问题的特殊功能在这里可能会有很长的路要走。例如,如果您知道 V1 在开始时始终为非零,此后始终为零,如本例所示,您有
V1[1] * cumprod((Level*(1 + V2))[-1]) -
我猜你想只使用 Level、V1、V2 来获得 V3,但如果是这样还不够清楚(如下面的答案所示,它们使用 V3 构建 V3)。
-
@Frank 我的意图是使用V1,V2从前一行生成的V1,V2和V3来构建新的V3。
-
好的,但这只需要使用 V3[1],第一个元素,对吗?如果我正确阅读了其他答案,那么他们也正在使用向量的其他元素。无论如何,我可能误会了。
-
@Frank 不,你是对的。我正在使用 V3[1] 让球滚动。我没有可用的 V3 列来生成新的 V3。我正在尝试使用
dt[,V3:= V1[1] * cumprod((Level*(1 + V2))[-1])],但它显示错误。
标签: r data.table dplyr cumsum