R 根据其他数据移动矩阵行

R 根据其他数据移动矩阵行,r,matrix,vectorization,apply,mapply,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

很抱歉,我重复了一个关于*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;

mat处理较大的块将加快速度

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
}

n.col很好的解决方案!循环的第二行不应该是:Mat4[选择,1:(N.Cel-I)]如果变量共享同一类,考虑使用矩阵而不是DATA框架,它会快得多。另外,避免函数和参数(shift)同名通常是个好主意。好的,谢谢你的提示