2015-02-09 79 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