Arrays 用动态移位的源数组填充目标数组

Arrays 用动态移位的源数组填充目标数组,arrays,r,Arrays,R,将数组按每列给定的数字移位的好方法是什么 我有下面的方法用不同数组的值填充一个全尺寸数组(“o”)(“p”,所有dimnames(p)都存在于“o”中) 有没有一个好方法可以解决这个问题而不必手动循环 我试过一些方向性的东西 o[(match(names(p[,1]),as.integer(names(o[,1]))-as.integer(names(o[1,])))),(match(names(p[1,]),names(o[1,])))] <- p o[(match(names(p[,

将数组按每列给定的数字移位的好方法是什么

我有下面的方法用不同数组的值填充一个全尺寸数组(“o”)(“p”,所有dimnames(p)都存在于“o”中)

有没有一个好方法可以解决这个问题而不必手动循环

我试过一些方向性的东西

o[(match(names(p[,1]),as.integer(names(o[,1]))-as.integer(names(o[1,])))),(match(names(p[1,]),names(o[1,])))] <- p

o[(match(names(p[,1])、as.integer(names(o[,1]))-as.integer(names(o[1,]))、(match(names(p[1,])、names(o[1,])))]
shift如果你只有称为矩阵的二维数组,那么
matrix
是一个稍微方便一点的构造函数。嗨,罗兰,谢谢,这是一个多维数组。我只是为了说明而展示2d。我可以接受0而不是NA。请检查下面的答案。稀疏矩阵定义为2D。我的答案中的函数应该很容易扩展到更高的维度。
   1  2  3 
1 NA NA NA 
2 NA NA NA 
3 10 NA NA 
4 11 12 NA 
5 NA 13 14 
6 NA NA 15 
o[(match(names(p[,1]),as.integer(names(o[,1]))-as.integer(names(o[1,])))),(match(names(p[1,]),names(o[1,])))] <- p
shift <- function(M) {
  #find indices of non-NAs
  ind <- which(!is.na(M), arr.ind = TRUE)
  #create shifted indices
  ind_shifted <- ind
  ind_shifted[, "row"] <- ind_shifted[, "row"] + 
                             as.integer(colnames(M))[ind_shifted[, "col"]]
  #fill matrix with shifted values
  M_shifted <- M + NA
  M_shifted[ind_shifted] <- M[ind]
  M_shifted
}

shift(o)
#   1  2  3
#1 NA NA NA
#2 NA NA NA
#3 10 NA NA
#4 11 12 NA
#5 NA 13 14
#6 NA NA 15