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

Petr Savicky savicky at cs.cas.cz
Fri Feb 17 14:46:57 CET 2012


On Fri, Feb 17, 2012 at 02:26:52PM +0100, Joel Fürstenberg-Hägg wrote:
> 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)

Hi.

Try the following. For simplicity, i assume the first 
column to be X0, but this is not necessary. Example data

  a <- sort(paste("A", 0:19, sep=""))
  names(a) <- sort(paste("X", 0:19, sep=""))
  pos <- data.frame(rbind(a))
  pos

    X0 X1 X10 X11 X12 X13 X14 X15 X16 X17 X18 X19 X2 X3 X4 X5 X6 X7 X8 X9
  a A0 A1 A10 A11 A12 A13 A14 A15 A16 A17 A18 A19 A2 A3 A4 A5 A6 A7 A8 A9

The reordering:

  columnNames <- colnames(pos)
  ind <- as.integer(substr(columnNames, 2, nchar(columnNames)))
  pos[, order(ind)]

    X0 X1 X2 X3 X4 X5 X6 X7 X8 X9 X10 X11 X12 X13 X14 X15 X16 X17 X18 X19
  a A0 A1 A2 A3 A4 A5 A6 A7 A8 A9 A10 A11 A12 A13 A14 A15 A16 A17 A18 A19

Hope this helps.

Petr Savicky.



More information about the R-help mailing list