我想根据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
谢谢。欢呼声。
答案 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
,它提供了更多的功能,我鼓励你查看。