我有一个从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
我如何才能实现这一目标,我知道在数据框架中进行此操作但不在表格中,我想知道它。感谢
答案 0 :(得分:2)
如果'CHR'列为ordered
,我们可以将列转换为factor
,levels
指定为{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