我有一张这样的桌子
table(mtcars$gear, mtcars$cyl)
我想按那些在4缸中观察更多的行进行排序。例如。
4 6 8
4 8 4 0
5 2 1 2
3 1 2 12我一直在玩秩序/排序/排名,但没有成功。如何订购表输出?
发布于 2018-08-21 09:47:09
我们可以通过列将table转换为data.frame,然后将order转换为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发布于 2018-08-21 10:51:49
可以试试这个。对相关列使用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发布于 2018-08-21 11:43:37
在与米兰相同的范围内,但使用order()函数,而不是在sort()-ed列表中查找names()。[,1]将在排序时查看第一列。
table(mtcars$gear, mtcars$cyl)[order(table(mtcars$gear, mtcars$cyl)[,1], decreasing=T),]https://stackoverflow.com/questions/51945826
复制相似问题