我有一张这样的桌子
table(mtcars$gear, mtcars$cyl)
我想按4个圆柱中具有更多观察值的行对行进行排序。例如。
4 6 8
4 8 4 0
5 2 1 2
3 1 2 12
我一直在处理订单/排序/等级,但没有太大的成功。如何订购表格输出?
答案 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),]