Как упомянул @NelsonGon в комментариях, создание функции с небольшой модификацией кода поможет
f1 <- function(v, step) {
N <- pracma::numel(v)
index <- seq(N,1,by=-step)
M <- pracma::numel(index)
r1 <- c(rbind((index), rev(index)))
val <- matrix(rep(rep(c(1, 0), M), r1), ncol = M)
val[!!val] <- sequence(colSums(val))
apply(val[x,], 2, function(x) x[order(x != 0)])
}
-тестирование
f1(1:10, 2)
# [,1] [,2] [,3] [,4] [,5]
# [1,] 1 0 0 0 0
# [2,] 2 0 0 0 0
# [3,] 3 1 0 0 0
# [4,] 4 2 0 0 0
# [5,] 5 3 1 0 0
# [6,] 6 4 2 0 0
# [7,] 7 5 3 1 0
# [8,] 8 6 4 2 0
# [9,] 9 7 5 3 1
#[10,] 10 8 6 4 2
f1(1:10, 3)
# [,1] [,2] [,3] [,4]
# [1,] 1 0 0 0
# [2,] 2 0 0 0
# [3,] 3 0 0 0
# [4,] 4 1 0 0
# [5,] 5 2 0 0
# [6,] 6 3 0 0
# [7,] 7 4 1 0
# [8,] 8 5 2 0
# [9,] 9 6 3 0
#[10,] 10 7 4 1
Примечание. Если вы хотите сохранить столбцы только с 0, это можно сделать в функции
f1(1:10, 4)
# [,1] [,2] [,3]
# [1,] 1 0 0
# [2,] 2 0 0
# [3,] 3 0 0
# [4,] 4 0 0
# [5,] 5 1 0
# [6,] 6 2 0
# [7,] 7 3 0
# [8,] 8 4 0
# [9,] 9 5 1
#[10,] 10 6 2
f1(1:10, 5)
# [,1] [,2]
# [1,] 1 0
# [2,] 2 0
# [3,] 3 0
# [4,] 4 0
# [5,] 5 0
# [6,] 6 1
# [7,] 7 2
# [8,] 8 3
# [9,] 9 4
#[10,] 10 5