【发布时间】:2013-05-06 21:09:27
【问题描述】:
我想在我的 data.table 中添加一个新列,其中包含基于Date 的Data1 的累积乘积。应为每个类别 (Cat) 计算累积产品,并应从最新可用的 Date 开始。
样本数据:
DF = data.frame(Cat=rep(c("A","B"),each=4), Date=rep(c("01-08-2013","01-07-2013","01-04-2013","01-03-2013"),2), Data1=c(1:8))
DF$Date = as.Date(DF$Date , "%m-%d-%Y")
DT = data.table(DF)
DT[ , Data1_cum:=NA_real_]
DT
Cat Date Data1 Data1_cum
1: A 2013-01-08 1 NA
2: A 2013-01-07 2 NA
3: A 2013-01-04 3 NA
4: A 2013-01-03 4 NA
5: B 2013-01-08 5 NA
6: B 2013-01-07 6 NA
7: B 2013-01-04 7 NA
8: B 2013-01-03 8 NA
结果应该是这样的:
Cat Date Data1 Data1_cum
1: A 2013-01-08 1 1
2: A 2013-01-07 2 2
3: A 2013-01-04 3 6
4: A 2013-01-03 4 24
5: B 2013-01-08 5 5
6: B 2013-01-07 6 30
7: B 2013-01-04 7 210
8: B 2013-01-03 8 1680
我发现我可以使用cumprod() 做类似的事情,但我不知道如何处理这些类别。 Data1 中的 NAs 应被忽略/视为 1。
真实数据集大约有 800 万行和 1000 个类别。
【问题讨论】:
-
你说有 1000 个类别的 8M 条目。这意味着每个类别大约有 8000 个条目。即使最小值是 2,累积乘积也最大是 2^8000,不是吗?你的大部分价值观不都是无穷大吗?
-
是的,但幸运的是主要有
NAs 和大多数小于 1 的数字。
标签: r data.table