首页 > 解决方案 > 如何遍历 nxn 矩阵并将 x 坐标、y 坐标以及值存储到 nx3 矩阵中

问题描述

编写了一个遍历矩阵并返回矩阵中每个非 NA 值的 x 坐标和 y 坐标的脚本。我如何附加此代码以创建附加到坐标的矩阵中每个元素的值的另一列

matrixop = function(m2){
zzz <- NULL

for (i in 1:ncol(m2)){
  for (j in 1:nrow(m2)) {
    if ((is.na(m2[i,j])) == FALSE ){

      }
    zzz <- rbind(zzz,c(i,j))

    }
  }

zzz
}
result = lapply(m1, FUN = matrixop) #m1 being existing nxn matrix

实际结果是一个 nx2 矩阵,其中 x 坐标位于第一列,y 坐标位于第二列。试图获得附加到这些坐标的值的第三列

标签: rloopsmatrix

解决方案


利用which参数arr.ind并将cbind矩阵的值视为向量。缺失值用 删除complete.cases

mat2coord <- function(x){
  d <- which(x == x | is.na(x), arr.ind = TRUE)
  d <- cbind(d, value = c(x))
  d[complete.cases(d), ]
}

m <- matrix(1:6, nrow = 3)
mat2coord(m)
#     row col value
#[1,]   1   1     1
#[2,]   2   1     2
#[3,]   3   1     3
#[4,]   1   2     4
#[5,]   2   2     5
#[6,]   3   2     6


set.seed(1234)
is.na(m) <- sample(6, 2)
mat2coord(m)
#     row col value
#[1,]   1   1     1
#[2,]   3   1     3
#[3,]   2   2     5
#[4,]   3   2     6

推荐阅读