繁体   English   中英

循环内的data.table列分配

[英]data.table column assignment within a loop

这就是我的data.table的样子。 最右边的三列是我想要的列。

 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)]
}

这是我根据OP的代码尝试的方法:

dt <- dt[, .(Product, Sales)]

plevels <- levels(dt$Product)

dt[, c(paste(plevels, 'CumSales', sep = '-')) :=
        lapply(plevels, function(x) cumsum(Sales * (Product == x)))]

#    Product Sales A-CumSales B-CumSales C-CumSales
# 1:       A    10         10          0          0
# 2:       B     5         10          5          0
# 3:       A    10         20          5          0
# 4:       A    20         40          5          0
# 5:       B    10         40         15          0
# 6:       C     5         40         15          5
# 7:       C     5         40         15         10

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM