Как упорядочить матрицу по числовым или буквенным значениям векторов столбцов в R? - PullRequest
0 голосов
/ 24 июня 2019

Заголовок в следующем примере не требует пояснений:

m = unique(replicate(5, sample(1:5, 5, rep=F)), MARGIN = 2)
m
      [,1] [,2] [,3] [,4] [,5]
[1,]    1    5    1    4    3
[2,]    5    1    5    1    2
[3,]    4    3    3    3    1
[4,]    3    4    4    5    5
[5,]    2    2    2    2    4

Но вместо этого я хочу:

      [,1] [,2] [,3] [,4] [,5]
[1,]    1    1    3    4    5
[2,]    5    5    2    1    1
[3,]    3    4    1    3    3
[4,]    4    3    5    5    4
[5,]    2    2    4    2    2

В идеале я хотел бы найти метод, которыйпозволяет выполнять тот же процесс, когда векторы столбцов являются словами (в алфавитном порядке).

Я пробовал что-то вроде m[ , sort(m)], но ничего не получилось ...

1 Ответ

1 голос
/ 24 июня 2019

m[, order(m[1, ]) упорядочит столбцы по первой строке. m[, order(m[1, ], m[2, ])] упорядочит по первому ряду, используя второй ряд как прерыватель связи. Получив фантазию, m[, do.call(order, split(m, row(m)))] упорядочит столбцы по первому ряду, используя все последующие строки для прерывателей связей. Это будет работать с character данными так же, как с numeric.

set.seed(47)
m = replicate(5, sample(1:5, 5, rep=F))
m
#      [,1] [,2] [,3] [,4] [,5]
# [1,]    5    4    1    5    1
# [2,]    2    2    3    2    3
# [3,]    3    5    5    1    2
# [4,]    4    3    2    3    5
# [5,]    1    1    4    4    4
m[, do.call(order, split(m, row(m)))]
#      [,1] [,2] [,3] [,4] [,5]
# [1,]    1    1    4    5    5
# [2,]    3    3    2    2    2
# [3,]    2    5    5    1    3
# [4,]    5    2    3    3    4
# [5,]    4    4    1    4    1
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...