【发布时间】:2017-04-11 15:59:23
【问题描述】:
这就是我的 data.table 的样子。最右边的三列是我的 desired 列。
library(data.table)
dt <- fread('
Product Sales A-CumSales B-CumSales C-CumSales
A 10 10 0 0
B 5 10 5 0
A 10 20 5 0
A 20 40 5 0
B 10 40 15 0
C 5 40 15 5
C 5 40 15 10
')
dt[, Product:= as.factor(Product)]
我的Product 列中的级别总是在变化。我正在尝试做一个循环,为每个Product 创建一个单独的列,计算相应Product 的累积Sales。
我试过了:
for (i in levels(dt$Product)) {
dt[,i:= cumsum((Product == "i") * Sales)]
}
【问题讨论】:
-
根据您的输入,我认为您的 C-CumSales 不正确
-
好吧,你可以放括号,比如
(i) :=。 -
@Frank 你是对的。我想我的意思是
dcast(dt[, 1:2, with = FALSE], Product + 1:nrow(dt) + rowid(Product)~Product,value.var = "Sales", fill = 0)[, c("A", "B", "C") := lapply(.SD, cumsum), .SDcols = A:C][] -
@akrun 感谢您的关注。我修好了。
-
@Frank 谢谢你的解决方案!
标签: r data.table apply lapply