[R] Summary: Reorder data frame columns by negating list of names

Thompson, David (MNR) David.John.Thompson at ontario.ca
Tue Feb 12 22:03:42 CET 2008


Thank you all,

All responses worked and focused on the use of combining the desired
column names (or numbers in Barry's solution) with variations of
'match(x, table)' and 'x %in% table' to generate the remaining column
names (numbers).

xxx <- data.frame(matrix(1:40, ncol=8))
names(xxx) <- letters[1:8]

# Common to all
ind <- c('b', 'd', 'h')
xxx[, c(ind, yyy)] # where c(ind, yyy) was:

# Jim Holtman
> c(ind, setdiff(names(xxx), ind))
[1] "b" "d" "h" "a" "c" "e" "f" "g"

# Dimitris Rizopoulos
> c(ind, names(xxx)[!names(xxx) %in% ind])
[1] "b" "d" "h" "a" "c" "e" "f" "g"

# Barry Rowlingson
> c(match(ind, names(xxx)), (1:dim(xxx)[2])[-match(ind, names(xxx))])
[1] 2 4 8 1 3 5 6 7

Thanks again, DaveT.
*************************************
Silviculture Data Analyst
Ontario Forest Research Institute
Ontario Ministry of Natural Resources
david.john.thompson at ontario.ca
http://ofri.mnr.gov.on.ca
*************************************
----- Original Message ----- 
From: "Thompson, David (MNR)" <David.John.Thompson at ontario.ca>
To: <r-help at r-project.org>
Sent: Tuesday, February 12, 2008 6:19 PM
Subject: [R] Reorder data frame columns by negating list of names


> Hello,
>
> I would like to reorder columns in a data frame by their names as
> demonstrated below:
>
> Take this data frame:
> > xxx <- data.frame(matrix(1:40, ncol=8))
> > names(xxx) <- letters[1:8]
> > xxx
>   a  b  c  d  e  f  g  h
> 1 1  6 11 16 21 26 31 36
> 2 2  7 12 17 22 27 32 37
> 3 3  8 13 18 23 28 33 38
> 4 4  9 14 19 24 29 34 39
> 5 5 10 15 20 25 30 35 40
>
> and reorder the columns like this:
> > xxx[,c( c('b', 'd', 'h'), c('a', 'c', 'e', 'f', 'g') )]
>    b  d  h a  c  e  f  g
> 1  6 16 36 1 11 21 26 31
> 2  7 17 37 2 12 22 27 32
> 3  8 18 38 3 13 23 28 33
> 4  9 19 39 4 14 24 29 34
> 5 10 20 40 5 15 25 30 35
>
> where I only have to name the columns that I'm interested in moving 
> to
> the first few positions, something like:
> > xxx[,c( c('b', 'd', 'h'), -c('b', 'd', 'h') )]
> Error in -c("b", "d", "h") : invalid argument to unary operator
>
> Suggestions? and Thank you, DaveT.
> *************************************
> Silviculture Data Analyst
> Ontario Forest Research Institute
> Ontario Ministry of Natural Resources
> david.john.thompson at ontario.ca
> http://ofri.mnr.gov.on.ca
>
> ______________________________________________
> 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.
> 


Disclaimer: http://www.kuleuven.be/cwis/email_disclaimer.htm



More information about the R-help mailing list