订购/排序/排列表格

时间:2018-08-21 09:40:44

标签: r

我有一张这样的桌子

table(mtcars$gear, mtcars$cyl)

我想按4个圆柱中具有更多观察值的行对行进行排序。例如。

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

我一直在处理订单/排序/等级,但没有太大的成功。如何订购表格输出?

3 个答案:

答案 0 :(得分:2)

我们可以按列将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

答案 1 :(得分:1)

可以尝试一下。将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

答案 2 :(得分:0)

在与米兰相同的范围内,但使用order()函数,而不是在names()版的列表中寻找sort()[,1]将在订购时查看第一列。

table(mtcars$gear, mtcars$cyl)[order(table(mtcars$gear, mtcars$cyl)[,1], decreasing=T),]