使用 R 中的循环依次修改矩阵中的行值

Sequentially amending row values in a matrix using loop in R

我真的不知道怎么表达这个问题,所以很容易理解,所以请多多包涵。

我有一个 2 列矩阵,需要根据另一个矩阵修改第 1 列中的值,比如 h

例如,h 可能如下所示:h <- c(11,10,10,8,12) 我的数据矩阵如下所示:

 [1,]    0    0
 [2,]    0    0
 [3,]    0   26
 [4,]    0   44
 [5,]    0    0
 [6,]    0   65
 [7,]    0    0
 [8,]    0    0
 [9,]    0    0
[10,]    0   28
[11,]    0   25
[12,]    0    0
[13,]    0   81
[14,]    0    0
[15,]    0    0 ...

等...

我需要根据向量 h 中的项目编号重命名零列。所以我需要行 1:11 被标记为 1,12:21 被标记为 2,22:31 被标记为 3 等等,像这样:

 [1,]    1    0
 [2,]    1    0
 [3,]    1   26
 [4,]    1   44
 [5,]    1    0
 [6,]    1   65
 [7,]    1    0
 [8,]    1    0
 [9,]    1    0
[10,]    1   28
[11,]    1   25
[12,]    2    0
[13,]    2   81
[14,]    2    0
[15,]    2    0 ...

我的问题是能够指定要更改第 1 列中的哪些行。我可以很容易地创建一个循环来标记 1,data[1:h[1],1) <- 1,但是当涉及到剩余的数字时,我找不到对 R "choose the next X rows, after the ones we've already changed"、"then select the next X rows and change to __".[=17= 说的方法]

抱歉,如果我没有很好地解释我的问题!

我们可以使用rep复制由'h'的元素生成的序列(seq_along(h))。

m1[,1] <- rep(seq_along(h), h)

根据?seq

‘seq_along’ and ‘seq_len’ are very fast primitives for two common cases.... ‘seq_along’ and ‘seq_len’ return an integer vector