Заказать матрицу по столбцу "скороговорки" с помощью R - PullRequest
0 голосов
/ 07 февраля 2019

здесь - фрейм данных;

    204 205 206 207 208 209 210 211 212 213
X1  0   1   1   0   0   1   1   1   1   0
X2  0   1   1   0   0   1   1   1   1   0
X3  0   0   1   0   0   1   1   1   1   0
X4  0   0   0   1   0   1   1   0   1   0
X5  1   0   1   0   1   1   1   1   0   1

, и я хотел бы отсортировать столбцы, чтобы получить наилучшее представление на тепловой карте, где 1 - красный, а 0 - белый.Поэтому я должен получить что-то вроде:

    209 210 212 212 206 211 205 207 204 213
X1  1   1   1   1   1   1   1   0   0   0
X2  1   1   1   1   1   1   1   0   0   0
X3  1   1   1   1   1   1   0   0   0   0
X4  1   1   1   1   0   0   0   1   0   0
X5  1   1   0   0   1   1   0   0   1   1

Идея состоит в том, чтобы собрать больше 0 и 1 в одной строке, чтобы получить наилучшее представление тепловой карты.

Ответы [ 2 ]

0 голосов
/ 07 февраля 2019

Вы можете сортировать столбцы и строки следующим образом:

mat <- mat[, order(colSums(mat), decreasing = T)]
mat[order(rowSums(mat), decreasing = T),]

   209 210 206 211 212 205 204 207 208 213
X5   1   1   1   1   0   0   1   0   1   1
X1   1   1   1   1   1   1   0   0   0   0
X2   1   1   1   1   1   1   0   0   0   0
X3   1   1   1   1   1   0   0   0   0   0
X4   1   1   0   0   1   0   0   1   0   0

РЕДАКТИРОВАТЬ

Также вы можете рассмотреть вектор весов:

weights <- c(5:1)

mat[, order(colSums(weights%*%mat), decreasing = T)]

   209 210 212 206 211 205 207 204 208 213
X1   1   1   1   1   1   1   0   0   0   0
X2   1   1   1   1   1   1   0   0   0   0
X3   1   1   1   1   1   0   0   0   0   0
X4   1   1   1   0   0   0   1   0   0   0
X5   1   1   0   1   1   0   0   1   1   1
0 голосов
/ 07 февраля 2019

Если ваш data.frame называется df, вы можете сделать:

df[, order(colSums(df), decreasing = TRUE)]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...