根据其他一些数据移动矩阵行

时间:2016-03-18 09:22:26

标签: r matrix vectorization apply mapply

我很抱歉重复有关* apply函数的问题,但是我无法让我的代码使用到目前为止找到的材料。我有一个矩阵(存储在一个大数据框中),我想将这个矩阵的行移动一定量(向左)。我想要移位的量对于每一行是不同的,并且存储在同一数据帧的另一列中。以下代码应说明我的目标

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;

但是我的300000x201矩阵运行得非常慢,所以我怎样才能对它进行矢量化(使用一些* apply命令)?

1 个答案:

答案 0 :(得分:2)

处理更大的块会加快速度

n.col <- ncol(mat)
for(i in unique(sv)){
  selection <- which(sv == i)
  mat[selection, 1:(n.col - i + 1)] <- mat[selection, i:n.col]
  mat[selection, (n.col - i + 1):n.col] <- 0
}