I don't really know how to word this question so it's easy to understand, so please bear with me.
I have a 2 column matrix and need to amend the values in column 1 according to another matrix, say h
.
For example, h
may look like this: h <- c(11,10,10,8,12)
and my data matrix looks like:
[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 ...
etc...
I need to rename the column of zeros, according to the item number in vector h
. So I need rows 1:11 to be labelled 1, 12:21 to be labelled 2, 22:31 to be labelled 3 etc., like this:
[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 ...
My problem is being able to specify which rows in column 1 to change. I can easily create a loop which labels the 1's, data[1:h[1],1) <- 1
but when it comes to the remaining numbers, I cannot find a way to say to R "choose the next X rows, after the ones we've already changed", "then select the next X rows and change to __".
Sorry if I haven't explained my problem too well!
We can use rep
to replicate the sequence generated (seq_along(h)
) by the elements of 'h'.
m1[,1] <- rep(seq_along(h), h)
According to ?seq
‘seq_along’ and ‘seq_len’ are very fast primitives for two common cases.... ‘seq_along’ and ‘seq_len’ return an integer vector