I have a vector of chromosome names
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")
I want to sort them as
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")
I tried to make my own order
chrOrder <-c((1:22),"X","Y","M")
and use it like
factor(cbind(q),levels=chrOrder)
But still I couldnt get it.
Edited..... I have similar senario but sligtly advanced. I have a data frame of three columns , name, chromosome, start
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))
I need to sort it first by name, then chromosome and the start. The result should be like
name chrom start
a 1 100
a 10 300
a 2 200
b 1 500
b 3 300
b X 200
I dont know how to use chrOrder in following:
indata <- df[do.call(order,df[,c(name, chrom, start)]),];