2015-02-09 58 views
0

我有以下结构的data.table:R:在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,其条目被添加只是总和从DY 1:5按ID分组。上述 该示例的结果是

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

正如我刚才所说,一个for循环是第一选择,以获得我想要的结果。但是,有没有更好的方法计算C没有for循环,特别是使用data.table包的力量?

回答

4

根据结果显示,您可能需要通过 “ID” 组合 “S” 列cumsum

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

如果您需要转换回来,因为@eddi建议

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

相当的优雅的方式。是否还有相当优雅的背部方式,所以如果你有C列并且你想计算S列? – kamath 2015-02-09 18:42:26

+1

@kamath'?diff' – eddi 2015-02-09 18:43:35

+0

我必须学习语法和函数diff来理解你的答案。 – kamath 2015-02-09 19:13:07