【发布时间】:2013-09-28 02:04:04
【问题描述】:
我有一个染色体名称向量
q<-c("1","10","11","12","13","14","15","16","17",
"18","19","20","21","22","2","3","4","5","6",
"7","8","9","X","Y","M")
我想将它们排序为
q<-c("1","2","3","4","5","6","7","8","9","10","11",
"12","13","14","15","16","17","18","19","20",
"21","22","X","Y","M")
我试着自己下订单
chrOrder <-c((1:22),"X","Y","M")
并像使用它
factor(cbind(q),levels=chrOrder)
但我还是听不懂。
已编辑..... 我有类似的情况,但稍微先进。我有一个三列的数据框,名称,染色体,开始
df <-data.frame(name =c("a","a","a","b","b","b"), chrom = c(1,2,10,1,3,"X"), start=c(100,200,300,500,300,200))
我需要先按名称排序,然后是染色体和开头。 结果应该是这样的
name chrom start
a 1 100
a 10 300
a 2 200
b 1 500
b 3 300
b X 200
我不知道如何在下面使用 chrOrder:
indata <- df[do.call(order,df[,c(name, chrom, start)]),];
【问题讨论】:
-
为什么不直接使用
chrOrder呢?为什么你期望factor对你的向量进行排序?同样,cbind在这里无效。 -
我对已编辑问题的预期结果感到困惑。第三行不在第二行之前是不是错了?
-
它先按“名称”排序,然后按“铬”排序。数字的排序不是自然的方式。它就像 1,10,100,2,200,22,299,300