[R] Re-order columns

John Kane jrkrideau at yahoo.ca
Sat Sep 19 17:46:17 CEST 2009


I'm not sure I understand what you are doing below but to rearrange columns of a data.frame you can just rearrange the indices.  Is this what you mean?

A couple of examples:

(mydata <- data.frame(aa=as.character(c("a", "b", "c", "d", "e")), bb = 1:5))

(mydata  <- mydata[,2:1])


df1 <- structure(list(site = c(1, 1, 4, 4, 1, 4), id = structure(c(1L,
2L, 2L, 3L, 1L, 2L), .Label = c("a", "b", "c"), class = "factor"),
    cata = c(1, 1, 6, 1, 1, NA), catb = c(1, 2, 3, 4, 5, 6),
    doga = c(3, 5, 3, 6, 4, 0), dogb = c(2, 4, 6, 8, 10, 12),
    rata = c(NA, 9, 9, 8, 9, 8), ratb = c(1, 2, 3, 4, 5, 6),
    bata = c(12, 42, NA, 45, 32, 54), batb = c(13, 15, 17, 19,
    21, 23)), .Names = c("site", "id", "cata", "catb", "doga",
"dogb", "rata", "ratb", "bata", "batb"), row.names = c("aa",
"bb", "cc", "dd", "ee", "ff"), class = "data.frame")

df1

(df1 <- df1[,rev(1:10)])


--- On Sat, 9/19/09, Santosh <santosh2005 at gmail.com> wrote:

> From: Santosh <santosh2005 at gmail.com>
> Subject: [R] Re-order columns
> To: r-help at r-project.org
> Received: Saturday, September 19, 2009, 11:25 AM
> Dear R'sians,
> Would really appreciate if you could suggest a more
> efficient way to order
> the columns of a dataset. The column names of the dataset
> contain indices
> separated by a period. Following are examples of my code
> and the dataset.
> 
> oC <- function(tg=x2) {
>     lth    <-
> length(grep("T",names(tg)))
>     thix   <-
> match(paste("T",seq(lth),sep=""),names(tg))
>     soi    <-
> c(grep("O",names(tg),fixed=T),grep("S",names(tg),fixed=T))
>     oi     <-
> data.frame(t(data.frame(strsplit(names(tg)[soi],"\\."),stringsAsFactors=F)),stringsAsFactors=F)
>     names(oi) <-
> c("par","ix1","ix2");row.names(oi) <- NULL
>     oi$cnm <- sub("^\\s+((.*\\S)\\s+)?$",
> "\\2", paste("
> ",paste(oi$par,oi$ix1,oi$ix2," ",sep="."),sep=""))
>     oi1    <-
> oi[order(oi$par,as.integer(oi$ix1),as.integer(oi$ix2)),]
>     return(list(oi1=oi1,thix=thix))
>  }
> 
> x1 <- c("TABLE NO. 1: Gold" ,
> " R            T2 
>          T1   
>        O.4.1.   
>    O.3.1.
> S.1.1.      " ,
> "            0 
> 3.68000E+01  1.41000E+03  4.94000E+03 
> 2.33000E+01
> 4.90000E+01",
> "           43 
> 3.77870E+01  2.46260E+03  4.44227E+03 
> 2.31390E+01
> 4.84272E+01",
> "           -1 
> 3.67870E+01  1.46260E+03  4.44227E+03 
> 2.31390E+01
> 4.84271E+01")
> x2 <-
> read.table(textConnection(x1),as.is=T,head=T,skip=1)
> x3 <- oC(x2)
> pcols  <- c(names(x2)[x3$thix],x3$oi1$cnm)
> x4 <-
> x2[,match(c(setdiff(names(x2),pcols),pcols),names(x2))]
> 
> Thanks a TON
> 
> Santosh
> 
>     [[alternative HTML version deleted]]
> 
> ______________________________________________
> R-help at 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.
> 


      __________________________________________________________________
Get a 



More information about the R-help mailing list