R中按行编号非零元素

Mar*_*ler 1 r matrix

我希望matrix按行编号非零元素。这是一个小的数据集和所需的结果。我希望在base中有一个解决方案R

my.data <- matrix(c(10,  0,  0,  0,  0,
                     0,  3,  9,  0,  1,
                     2, 12,  0,  0,  0,
                     5,  5,  5,  0,  5,
                     0,  0,  0,  0,  0), nrow = 5, byrow = TRUE)

desired.result <- matrix(c( 1,  0,  0,  0,  0,
                            0,  1,  2,  0,  3,
                            1,  2,  0,  0,  0,
                            1,  2,  3,  0,  4,
                            0,  0,  0,  0,  0), nrow = 5, byrow = TRUE)
Run Code Online (Sandbox Code Playgroud)

Gre*_*gor 7

另一个选择:

# create new matrix with multiplication
t(apply(my.data != 0, 1, cumsum)) * (my.data != 0)


# alternative:
# replace elements in original matrix
my.data[my.data != 0] = t(apply(my.data != 0, 1, cumsum))[my.data != 0]
my.data
#      [,1] [,2] [,3] [,4] [,5]
# [1,]    1    0    0    0    0
# [2,]    0    1    2    0    3
# [3,]    1    2    0    0    0
# [4,]    1    2    3    0    4
# [5,]    0    0    0    0    0
Run Code Online (Sandbox Code Playgroud)