У меня есть такая таблица

table(mtcars$gear, mtcars$cyl)

Я хочу ранжировать ряды по тем, у которых больше наблюдений в 4 цилиндре. Например.

     4  6  8
  4  8  4  0
  5  2  1  2
  3  1  2 12

Я играл с порядком / сортировкой / рангом без особого успеха. Как я могу заказать вывод таблиц?

r
3
user3507584 21 Авг 2018 в 12:40

3 ответа

Лучший ответ

Мы можем преобразовать table в data.frame, а затем order по столбцу.

sort_col <- "4"
tab <- as.data.frame.matrix(table(mtcars$gear, mtcars$cyl))
tab[order(-tab[sort_col]), ]
# OR tab[order(tab[sort_col], decreasing = TRUE), ]

#  4 6  8
#4 8 4  0
#5 2 1  2
#3 1 2 12

Если мы не хотим преобразовывать его во фрейм данных и хотим сохранить структуру table, мы можем сделать

tab <- table(mtcars$gear, mtcars$cyl)
tab[order(-tab[,dimnames(tab)[[2]] == sort_col]),]

#     4  6  8
#  4  8  4  0
#  5  2  1  2
#  3  1  2 12
2
Ronak Shah 21 Авг 2018 в 09:59

Могли бы попробовать это. Используйте sort для соответствующего столбца, указав decreasing=TRUE; взять names отсортированных строк и подмножеств, используя их.

table(mtcars$gear, mtcars$cyl)[names(sort(table(mtcars$gear, mtcars$cyl)[,1], dec=T)), ]

     4  6  8
  4  8  4  0
  5  2  1  2
  3  1  2 12
1
milan 21 Авг 2018 в 11:01

В той же области, что и в Милане, но с использованием функции order() вместо поиска names() в sort() редактируемом списке. [,1] должен смотреть на первый столбец при заказе.

table(mtcars$gear, mtcars$cyl)[order(table(mtcars$gear, mtcars$cyl)[,1], decreasing=T),]
0
P1storius 21 Авг 2018 в 11:43
51945826