如何按用户定义的顺序对数据帧进行排序(例如,非字母顺序) [英] How to sort a data frame by user-defined (e.g. non-alphabetic order)
本文介绍了如何按用户定义的顺序对数据帧进行排序(例如,非字母顺序)的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
给出一个数据帧dna
> dna
chrom start
chr2 39482
chr1 203918
chr1 198282
chrX 7839028
chr17 3874
以下代码按字母升序将dna
按$chrom
以及按数字升序按$start
重新排序:
The following code reorders dna
by $chrom
in alphabetical ascending order and by $start
in numerical ascending order:
> dna <- dna[with(dna, order(chrom, start)), ]
> dna
chrom start
chr1 198282
chr1 203918
chr17 3874
chr2 39482
chrX 7839028
但是,我希望能够按以下方式排序$chrom
(为此处示例简化):
However, I would like to be able to have $chrom
ordered as follows (simplified for the sake of my example here):
chrom_order <- c("chr1","chr2", "chr17", "chrX")
我不允许重命名内容,例如将chr1
重命名为chr01
.
I am not allowed to rename stuff, for example chr1
to chr01
.
推荐答案
您需要在factor
中指定levels
,然后将order
用于索引编制:
You need to specify the levels
in factor
and then use order
with indexing:
zz <- "chrom start
chr2 39482
chr1 203918
chr1 198282
chrX 7839028
chr17 3874"
Data <- read.table(text=zz, header = TRUE)
library(Hmisc)
library(gdata)
Data$chrom <- reorder.factor(Data$chrom , levels = c("chr1","chr2", "chr17", "chrX"))
Data[order(Data$chrom), ]
chrom start
2 chr1 203918
3 chr1 198282
1 chr2 39482
5 chr17 3874
4 chrX 7839028
或者您可以使用此:
> Data$chrom <- factor(chrom , levels = c("chr1","chr2", "chr17", "chrX"))
> Data[order(Data$chrom), ]
chrom start
2 chr1 203918
3 chr1 198282
1 chr2 39482
5 chr17 3874
4 chrX 7839028
或使用此:
> Data$chrom <- reorder(Data$chrom, new.order=c("chr1","chr2", "chr17", "chrX"))
> Data[order(Data$chrom), ]
这篇关于如何按用户定义的顺序对数据帧进行排序(例如,非字母顺序)的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文