如何根据R中的列名对表进行排序?

时间:2015-09-07 14:54:05

标签: r

我有一个从data.frame创建的表,其计数函数为R.它基本上是一行,其中行是染色体编号。但是,count函数不会按染色体数量的顺序生成表。如何修复此订单。我尝试了排序和排序功能,但它们似乎不适用于桌面。

dist<- read.table("~/Desktop/file.txt",header=TRUE,stringsAsFactors=FALSE)
head(dist)
 Gene CHR ALLELE
1  SLC35E2   1    C/T
2     NADK   1    A/C
3    TTC34   1    T/G
4    PEX14   1    C/T
5 TNFRSF1B   1    G/T
6  CROCCP2   1    G/T
uniq_dist<-dist[!duplicated(dist$Gene), ]
dist_mat <- data.frame(uniq_dist[,-1], row.names= uniq_dist[,1])
counts <- table(dist_mat $CHR)
counts 
1 10 11 12 13 14 15 16 17 18 19  2 20 21 22  3  4  5  6  7  8  9  X 
21 12 18 16  7 15 11  4 14  4 16 20  4  4  2 23  9 10  8 12  3 12  5 
dim(counts)
[1] 23
class(counts)
"table"
I want to arrange the order of in the chromosome number from 1-22 and then X at the end and then plot using bar plot

So the desired output should be in order of 
1   2   3   4   5   6   7   8   9   10  11  12  13  14  15  16  17  18  19  20  21  22  X
21  20  23  9   10  8   12  3   12  12  18  16  7   15  11  4   14  4   16  4   4   2   5

我如何才能实现这一目标,我知道在数据框架中进行此操作但不在表格中,我想知道它。感谢

1 个答案:

答案 0 :(得分:2)

如果'CHR'列为ordered,我们可以将列转换为factorlevels指定为{CHR'的unique值,然后执行table

table(with(dist_mat, factor(CHR, levels= unique(CHR))))

如果没有订购,我们可以在levels中指定我们希望它出现在order

中的table
table(with(dist_mat, factor(CHR, levels= c(1:22, 'X'))))

使用可重现的例子

set.seed(24)
v1 <- sample(c(1:22, 'X'), 100, replace=TRUE)

OP的方法

table(v1)
# v1
# 1 10 11 12 13 14 15 16 17 18 19  2 20 21 22  3  4  5  6  7  8  9  X 
#2  3  5  6  3  4  4  4  7  3  2  5  2  2  4  5  6  4  8  5  6  6  4 

转换为factor

table(factor(v1, levels=c(1:22, 'X')))
# 1  2  3  4  5  6  7  8  9 10 11 12 13 14 15 16 17 18 19 20 21 22  X    
# 2  5  5  6  4  8  5  6  6  3  5  6  3  4  4  4  7  3  2  2  2  4  4