首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >对表排序/排序/排序

对表排序/排序/排序
EN

Stack Overflow用户
提问于 2018-08-21 09:40:44
回答 3查看 87关注 0票数 3

我有一张这样的桌子

table(mtcars$gear, mtcars$cyl)

我想按那些在4缸中观察更多的行进行排序。例如。

代码语言:javascript
复制
     4  6  8
  4  8  4  0
  5  2  1  2
  3  1  2 12

我一直在玩秩序/排序/排名,但没有成功。如何订购表输出?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2018-08-21 09:47:09

我们可以通过列将table转换为data.frame,然后将order转换为order

代码语言:javascript
复制
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结构,我们可以这样做

代码语言:javascript
复制
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
EN

Stack Overflow用户

发布于 2018-08-21 10:51:49

可以试试这个。对相关列使用sort,指定decreasing=TRUE;使用它们获取排序行和子集的names

代码语言:javascript
复制
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
EN

Stack Overflow用户

发布于 2018-08-21 11:43:37

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

代码语言:javascript
复制
table(mtcars$gear, mtcars$cyl)[order(table(mtcars$gear, mtcars$cyl)[,1], decreasing=T),]
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51945826

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档