Мы можем использовать row
/ col
, чтобы получить значение строки и столбца для каждого значения в матрице и свернуть матрицу в вектор, чтобы получить фактическое значение и cbind
все из них вместе.
cbind.data.frame(rnum = c(row(mtx)), cnum = c(col(mtx)), cell = c(mtx))
# rnum cnum cell
#1 1 1 -1.2070657
#2 2 1 0.2774292
#3 3 1 1.0844412
#4 4 1 -2.3456977
#5 1 2 0.4291247
#6 2 2 0.5060559
#7 3 2 -0.5747400
#8 4 2 -0.5466319
#9 1 3 -0.5644520
#10 2 3 -0.8900378
#11 3 3 -0.4771927
#12 4 3 -0.9983864
Уловка, которую мы можем использовать с which
, состоит в том, чтобы найти условие, которое всегда TRUE
, использовать arr.ind = TRUE
, чтобы получить индекс строки и столбца и cbind
значения, такие же, как указано выше.
cbind.data.frame(which(mtx > 0 | mtx < 0, arr.ind = TRUE), cell = c(mtx))
данные
set.seed(1234)
mtx <- array(rep(rnorm(12)), dim = c(4,3))