Shifting rows of matrices depending on some other data

Viewed 54

I'm sorry for repeating a question about the *apply functions, but I cannot get my code to work with the material that I found so far. I have a matrix (stored in a large data frame) and I want to shift the rows of this matrix by a certain amount (to the left). The amount by which I want to shift is different for each row and is stored in another column of the same data frame. The following code should illustrate what I am aiming for

mat <- matrix(rnorm(15),ncol=5,nrow=3);
sv <- c(1,4,2);

mat;

shift <- function(x,shift){c(x[(1+max(0,shift)):length(x)],rep(0,max(0,shift)))}

for(i in 1:nrow(mat)){mat[i,] <-  shift(mat[i,],sv[i])}

mat;

But this runs incredibly slow on my 300000x201 matrix, so how could I vectorize this (using some of *apply commands)?

1 Answers
Related