Sorry, it should be: > fakedata[, order(pos)] 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: > fakedata <- data.frame(A=c(0,0,0), X1=c(1,1,1), X6=c(6,6,6), X7=c(7,7,7), > X3=c(3,3,3), X4=c(4,4,4), X9=c(9,9,9), X2=c(2,2,2), X8=c(8,8,8)) > pos <- colnames(fakedata)[2:ncol(fakedata)] > pos <- c(1, 1+as.numeric(gsub("X", "", pos))) > fakedata 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 > fakedata[, order(pos)] 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 <jo...@life.ku.dk>: > It does not work when using more variables, and my data frames usually > contains about thousand columns... > > Best, > > Joel > >> fakedata <- data.frame(A=c(0,0,0), X1=c(1,1,1), X6=c(6,6,6), X7=c(7,7,7), >> X3=c(3,3,3), X4=c(4,4,4), X9=c(9,9,9), X2=c(2,2,2), X8=c(8,8,8), >> X5=c(5,5,5)) >> fakedata > A X1 X6 X7 X3 X4 X9 X2 X8 X5 > 1 0 1 6 7 3 4 9 2 8 5 > 2 0 1 6 7 3 4 9 2 8 5 > 3 0 1 6 7 3 4 9 2 8 5 >> pos <- colnames(fakedata)[2:ncol(fakedata)] >> pos > [1] "X1" "X6" "X7" "X3" "X4" "X9" "X2" "X8" "X5" >> pos <- c(1, 1+as.numeric(gsub("X", "", pos))) >> pos > [1] 1 2 7 8 4 5 10 3 9 6 >> fakedata[, pos] > A X1 X9 X2 X7 X3 X5 X6 X8 X4 > 1 0 1 9 2 7 3 5 6 8 4 > 2 0 1 9 2 7 3 5 6 8 4 > 3 0 1 9 2 7 3 5 6 8 4 > >>>> Sarah Goslee <sarah.gos...@gmail.com> 17-02-2012 14:36 >>> >> 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 <jo...@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 -- Sarah Goslee http://www.stringpage.com http://www.sarahgoslee.com http://www.functionaldiversity.org ______________________________________________ R-help@r-project.org mailing list https://stat.ethz.ch/mailman/listinfo/r-help PLEASE do read the posting guide http://www.R-project.org/posting-guide.html and provide commented, minimal, self-contained, reproducible code.