订单号由两列组成

时间:2014-02-17 18:31:45

标签: r

我想根据R中的两个列值排序所有行。这是我的输入:

chr   start   no

 4     85     non1
 4     23     non2
 6     10     non2
 8     25     non2
 22    56     non4
 2     15     non1

这是我的预期输出:

chr   start   no
 2     15     non1
 4     23     non2
 4     85     non1
 6     10     non2
 8     25     non2
 22    56     non4

谢谢。欢呼声。

2 个答案:

答案 0 :(得分:1)

order函数接受可变数量的输入向量,按第一个排序,然后是第二个,依此类推......

BED=read.table(text=
"chr   start   no
4     85     non1
4     23     non2
6     10     non2
8     25     non2
22    56     non4
2     15     non1", header=T)

BED[order(BED$chr, BED$start),]
   chr start   no
6   2    15 non1
2   4    23 non2
1   4    85 non1
3   6    10 non2
4   8    25 non2
5  22    56 non4

答案 1 :(得分:1)

虽然您当然可以使用基本软件包中的order,但为了处理数据框,我强烈建议您使用plyr软件包。

chr <- c(4,4,6,8,22,2)
start <- c(85, 23, 10, 25, 56, 15)
no <- c("non1", "non2", "non2", "non2", "non4", "non1")

myframe <- data.frame(chr, start, no)

创建数据框。在处理字符列方面:

myframe$chr <- as.numeric(myframe$chr)

然后获得安排的版本非常简单:

library(plyr)
arrangedFrame <- arrange(myframe, chr, start)
print(arrangedFrame)

  chr start   no
1   2    15 non1
2   4    23 non2
3   4    85 non1
4   6    10 non2
5   8    25 non2
6  22    56 non4

使用arrange还有很多易于修改的选项,与使用order相比,可以更轻松地进行重新排序。虽然我还没有使用它,但我知道Hadley不久前发布了dplyr,它提供了更多的功能,我鼓励你查看。