Как ранжировать вектор внутри матрицы? в R - PullRequest
0 голосов
/ 03 марта 2020

Я создал матрицу, в которой каждый элемент матрицы представляет собой вектор из двух чисел. Теперь я хочу ранжировать все векторы внутри, поэтому я получаю ранг векторов как новых векторных элементов матрицы.

Вот пример кода:

listwvectors <- vector("list")
t=1
for (i in 1:3) {
  for (j in 1:5) {
    listwvectors[[t]] <- c(i,j)
    t=t+1
  }
}
print(listwvectors)

testmatrix <- matrix(data=listwvectors, nrow=5, ncol=3)
print(testmatrix)

rank(testmatrix[1,1])

Последняя часть («rank (testmatrix [1,1])») просто дает 1. Почему это так? Я хочу напечатать ранжированный вектор. Итак, на самом деле, я хочу создать новую матрицу, которая будет иметь тот же режим, что и тестовая матрица, но векторы внутри - это ранжированные векторы тестовой матрицы.

Надеюсь, вы понимаете, о чем я пытаюсь спросить. Заранее спасибо! :) 1008 *

Ответы [ 2 ]

0 голосов
/ 03 марта 2020

минимальный пример данных:

m <- matrix(list(c(1,3), c(2,1), c(2,2), c(1,2)), ncol=2)
        [, 1]    [, 2]
[1, ] c(1, 3)  c(2, 2) 
[2, ] c(2, 1)  c(1, 2)

Решение 1 с использованием apply (возвращает «3d-матрицу»):

apply(apply(m, c(1,2), function(x) rank(x[[1]]))

Решение 2 с использованием l oop (возвращает «2d матрицу» списков):

result <- m # copy original matrix as template to recieve rankings
for (i in seq_along(m[, 1])) {
  for (j in seq_along(m[1, ])) {
    result[i, j][[1]] <- rank(m[i, j][[1]])
  }
}
0 голосов
/ 03 марта 2020

поскольку в матрице есть только один вектор, вы можете использовать rank (my_matrix)

...