【问题标题】:R: column sum in a data.table without for-loopR:没有for循环的data.table中的列总和
【发布时间】:2015-02-09 18:27:50
【问题描述】:

我有一个如下结构的data.table:

DT = data.table(ID = rep(c("A", "B"), each=5), 
                DY = 1:5, 
                S = c(0, 50, 50, 200, 50, 5, 20, 5, 20, 25))

data.table 应添加一列C,其条目只是按ID 分组的1:5 中DY i 的总和。 上面例子的结果是

DT[, C:=c(0, 50, 100, 300, 350, 5, 25, 30, 50, 75)]

正如我所描述的,for 循环是获得我想要的结果的第一选择。但是,有没有更好的方法在没有 for 循环的情况下计算 C,尤其是使用 data.table-package 的强大功能?

【问题讨论】:

    标签: r for-loop sum data.table


    【解决方案1】:

    根据显示的结果,您可能需要按“ID”分组的“S”列的cumsum

     DT[, C:=cumsum(S), by = ID]
    

    如果您需要按照@eddi 的建议进行改造

     DT[, S:=c(C[1L],diff(C)), by = ID]
    

    【讨论】:

    • 相当优雅的方式。是否还有一种相当优雅的后退方式,所以如果你有 C 列并且你想计算 S 列?
    • 我必须研究语法和函数差异才能理解你的答案。
    猜你喜欢
    • 1970-01-01
    • 2023-04-09
    • 1970-01-01
    • 1970-01-01
    • 2012-05-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多