Skip to content

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

10 messages · Joel Fürstenberg-Hägg, Alfredo Alessandrini, jim holtman +2 more

#
A X2 X1 X3
1 0  2  1  3
2 0  2  1  3
3 0  2  1  3
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>:

  
    
#
pos2 <- pos1[, c("X", "X1", "X2", "X3", "X4", "X5", "X6", "X7", "X8",
"X9", "X10", "X11", "X12",
      "X13", "X14", "X15", "X16", "X17", "X18", "X19", "X20")]


2012/2/17 Joel F?rstenberg-H?gg <joelf at life.ku.dk>:

  
    
#
On Fri, Feb 17, 2012 at 02:26:52PM +0100, Joel F?rstenberg-H?gg wrote:
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.
#
Sorry, it should be:
A X1 X2 X3 X4 X5 X6 X7 X8 X9
1 0  1  2  3  4  5  6  7  8  9
2 0  1  2  3  4  5  6  7  8  9
3 0  1  2  3  4  5  6  7  8  9

Using order also ensures that non-sequential column ids will work:
A X1 X6 X7 X3 X4 X9 X2 X8
1 0  1  6  7  3  4  9  2  8
2 0  1  6  7  3  4  9  2  8
3 0  1  6  7  3  4  9  2  8
A X1 X2 X3 X4 X6 X7 X8 X9
1 0  1  2  3  4  6  7  8  9
2 0  1  2  3  4  6  7  8  9
3 0  1  2  3  4  6  7  8  9

Sarah

2012/2/17 Joel F?rstenberg-H?gg <joelf at life.ku.dk>: