逐行累计和
Rowwise cumulative sum
我有一个data.table
dt
如下
df <- data.frame(t1 = rep(0,5), t3 = c(12, 5, 8,9, 5), t7= c(25, 48, 7, 9, 14))
dt <- setDT(df)
dt
t1 t3 t7
1: 0 12 25
2: 0 5 48
3: 0 8 7
4: 0 9 9
5: 0 5 14
我想获得各列的累计总和。我只是跨行得到它。如何在 data.table
.
中执行此操作
dt[, 1:3 := cumsum(dt)]
dt
t1 t3 t7
1: 0 12 25
2: 0 17 73
3: 0 25 80
4: 0 34 89
5: 0 39 103
期望的输出如下:
dt
t1 t3 t7
1: 0 12 37
2: 0 5 53
3: 0 8 15
4: 0 9 18
5: 0 5 19
如果我们需要按行执行此操作,那么一个选项是按行分组,unlist
,获取 cumsum
,转换为 list
并将其分配给列
dt[, (1:3) := as.list(cumsum(unlist(.SD))), 1:nrow(dt)]
dt
# t1 t3 t7
#1: 0 12 37
#2: 0 5 53
#3: 0 8 15
#4: 0 9 18
#5: 0 5 19
或者另一个选项是 matrixStats
中的 rowCumsums
,它可以应用于 matrix
library(matrixStats)
dt[, (1:3) := as.data.table(rowCumsums(as.matrix(.SD)))]
另一个选项使用 Reduce
和 accumulate=TRUE
:
dt[, names(dt) := Reduce(`+`, dt, accumulate = TRUE)]
dt
# t1 t3 t7
#1: 0 12 37
#2: 0 5 53
#3: 0 8 15
#4: 0 9 18
#5: 0 5 19
我有一个data.table
dt
如下
df <- data.frame(t1 = rep(0,5), t3 = c(12, 5, 8,9, 5), t7= c(25, 48, 7, 9, 14))
dt <- setDT(df)
dt
t1 t3 t7
1: 0 12 25
2: 0 5 48
3: 0 8 7
4: 0 9 9
5: 0 5 14
我想获得各列的累计总和。我只是跨行得到它。如何在 data.table
.
dt[, 1:3 := cumsum(dt)]
dt
t1 t3 t7
1: 0 12 25
2: 0 17 73
3: 0 25 80
4: 0 34 89
5: 0 39 103
期望的输出如下:
dt
t1 t3 t7
1: 0 12 37
2: 0 5 53
3: 0 8 15
4: 0 9 18
5: 0 5 19
如果我们需要按行执行此操作,那么一个选项是按行分组,unlist
,获取 cumsum
,转换为 list
并将其分配给列
dt[, (1:3) := as.list(cumsum(unlist(.SD))), 1:nrow(dt)]
dt
# t1 t3 t7
#1: 0 12 37
#2: 0 5 53
#3: 0 8 15
#4: 0 9 18
#5: 0 5 19
或者另一个选项是 matrixStats
中的 rowCumsums
,它可以应用于 matrix
library(matrixStats)
dt[, (1:3) := as.data.table(rowCumsums(as.matrix(.SD)))]
另一个选项使用 Reduce
和 accumulate=TRUE
:
dt[, names(dt) := Reduce(`+`, dt, accumulate = TRUE)]
dt
# t1 t3 t7
#1: 0 12 37
#2: 0 5 53
#3: 0 8 15
#4: 0 9 18
#5: 0 5 19