[R] How to change the order of columns in a data frame?

Sarah Goslee sarah.goslee at gmail.com
Fri Feb 17 14:36:27 CET 2012


> fakedata <- data.frame(A=c(0,0,0), X2=c(2,2,2), X1=c(1,1,1), X3=c(3,3,3))
> fakedata
  A X2 X1 X3
1 0  2  1  3
2 0  2  1  3
3 0  2  1  3
> pos <- colnames(fakedata)[2:ncol(fakedata)]
> pos <- c(1, 1+as.numeric(gsub("X", "", pos)))
> fakedata[,  pos]
  A X1 X2 X3
1 0  1  2  3
2 0  1  2  3
3 0  1  2  3
>

Sarah

2012/2/17 Joel Fürstenberg-Hägg <joelf at life.ku.dk>:
> Dear all,
>
> I have a data frame in which the columns need to be ordered. The first column X is at the right position, but the remaining columns X1-Xn should be ordered like this: X1, X2, X3 etc instead of like below.
>
>> colnames(pos1)
>  [1] "X"   "X1"  "X10" "X11" "X12" "X13" "X14" "X15" "X16" "X17" "X18" "X19" "X2"  "X20" "X3"  "X4"  "X5"  "X6"  "X7"  "X8"  "X9"
>
>> pos1[1:5,1:5]
>      X       X1       X10       X11       X12
> 1 100.5 7949.469 18509.064  8484.969 17401.056
> 2 101.5 3080.058  7794.691  3211.323  8211.058
> 3 102.5 1854.347  4347.571  1783.846  4827.338
> 4 103.5 2064.441  8421.746  2012.536  8363.785
> 5 104.5 9650.402 26637.926 10730.647 27053.421
>
> I am trying to first change the first column name to something without an X and save as a vector. I would then remove the X from each position use the vector for renaming the columns. Then the column 2-n could be ordered, I hope...
>
> colnames(pos)[1] <- "Mass"
> columnNames <- colnames(pos)
>
> Does any of you have an idea how to do this, or perhaps there is a smoother solution?
> Would it be easier to solve it if the contents of the first column were extracted and used as row names instead?
>
> Best regards,
>
> Joel
>


-- 
Sarah Goslee
http://www.functionaldiversity.org



More information about the R-help mailing list