北京大学生物信息平台论坛

 找回密码
 立即注册
搜索
热搜: 通知 活动

R中对数据框进行复合排序

[复制链接]
tangdw 发表于 2016-1-7 16:10:16 | 显示全部楼层 |阅读模式
在R中操作数据框时,我们经常面对的一个问题是排序整理,这个操作可以根据不同需求用order,rank或者sort函数完成,但是当要进行复合排序,即先按照不同样本的某一个指标排序(例如:染色体序号),当这个指标相同时,再按照下一个指标排序(如染色体上位置),这个操作应该怎么完成呢?

对于这个问题,也可以使用sort函数,例如对于下面这个数据框,我们希望先按照第一列染色体序号(chrom)排序,再按照第二列(B_start)排序,

屏幕快照 2016-01-07 下午4.14.25.png


具体的操作方法是,给sort的第一个参数是希望首要用于排序的向量,第二个参数是希望次要用于排序的向量:
sort(dataframe$chrom,dataframe$B_start)

但是这样我们得到的只是重新排序之后的行号,再通过复制进行一步重排即可,总的而言就是:
newOrder <- sort(dataframe$chrom,dataframe$B_start)
dataframe <- dataframe[newOrder,]


屏幕快照 2016-01-07 下午4.14.52.png

回复

使用道具 举报

youess 发表于 2016-1-8 18:03:45 | 显示全部楼层
本帖最后由 youess 于 2016-1-8 18:06 编辑
mt1022 发表于 2016-1-8 12:48
如果要按照第一个参数升序第二个次要的参数降序排序,有简单的方法吗?
  1. d = data.frame(a=rep(5:1, 2), b=c(1:5, 10:6))
  2. d[order(d$a, -d$b), ]
复制代码
回复 支持 1 反对 0

使用道具 举报

mt1022 发表于 2016-1-8 12:48:03 | 显示全部楼层
如果要按照第一个参数升序第二个次要的参数降序排序,有简单的方法吗?
来人
回复 支持 反对

使用道具 举报

mt1022 发表于 2016-1-10 12:52:39 | 显示全部楼层

没仔细看过order的帮助,它的帮助文档里给出的例子就有根据几个变量按照不同顺序排序的,多谢。
来人
回复 支持 反对

使用道具 举报

北京大学生物信息平台论坛

GMT+8, 2017-9-23 04:43 , Processed in 0.087829 second(s), 26 queries .

Powered by Discuz! X3

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表