Сначала я подумал, что вам просто нужно применить cumsum()
к каждому столбцу, но, похоже, вам также нужно умножить совокупную сумму на сами столбцы, чтобы обеспечить сохранение нулей:
test = data.frame(c(0,1,1,1,0,0),c(0,0,1,1,1,0),c(0,0,0,1,1,1),c(0,0,0,0,1,1),c(0,0,0,0,0,1))
colnames(test) = c('Position','Position1','Position2','Position3','Position4')
apply(test, 2, function(x) x * cumsum(x))
#> Position Position1 Position2 Position3 Position4
#> [1,] 0 0 0 0 0
#> [2,] 1 0 0 0 0
#> [3,] 2 1 0 0 0
#> [4,] 3 2 1 0 0
#> [5,] 0 3 2 1 0
#> [6,] 0 0 3 2 1
Создано 2018-11-19 с помощью пакета представительства (v0.2.1)
Если вы действительно хотите просто накопительную сумму для каждого столбца, вы можете просто использовать apply(df, 2, cumsum)
:
test = data.frame(c(0,1,1,1,0,0),c(0,0,1,1,1,0),c(0,0,0,1,1,1),c(0,0,0,0,1,1),c(0,0,0,0,0,1))
colnames(test) = c('Position','Position1','Position2','Position3','Position4')
apply(test, 2, cumsum)
#> Position Position1 Position2 Position3 Position4
#> [1,] 0 0 0 0 0
#> [2,] 1 0 0 0 0
#> [3,] 2 1 0 0 0
#> [4,] 3 2 1 0 0
#> [5,] 3 3 2 1 0
#> [6,] 3 3 3 2 1
Создан 2018-11-19 с помощью представительного пакета (v0.2.1)