
Thanks all,

I used Gavins approach - unlisting the titles and the replacing names, as my titles were stored as factors in the data frame as that was the way they were imported...

Tom


> Subject: Re: [R] Change data frame column names
> From: gavin.simpson@ucl.ac.uk
> To: tomliptrot@hotmail.com
> CC: r-help@r-project.org
> Date: Wed, 15 Jul 2009 16:12:32 +0100
> 
> On Wed, 2009-07-15 at 14:35 +0000, Tom Liptrot wrote:
> > 
> > 
> > 
> > Hi R helpers,
> > 
> > I have a data frame and I want to change the column names to names I have held in another data frame, but I am having difficulty. All data framnes are large so i can't input manually. Below is what i have tried so far:
> > 
> > df<-data.frame(a=1:5, b=2:6, d=3:7, e=4:8)
> > coltitles<-data.frame(v1="col number one", v2="col number two", v3="col number three", v4="col number four")
> > 
> > ##first attempt
> > 
> > names(df)<-coltitles
> > names(df)
> > [1] "1" "1" "1" "1"   ###not what i wanted as I want names(df) to return [1] "col number one" "col number two" "col number three" "col number four"
> > 
> > 
> > 
> > ##second attempt
> > 
> > coltitles<-as.vector(coltitles, mode="character")  ##trying to convert to a character vector after looking at help
> > is.vector(coltitles)
> > [1] TRUE
> > names(df)<-coltitles
> > names(df)
> > [1] "1" "1" "1" "1"   ###again not what I wanted
> > 
> > How can I convert the column names?
> 
> This seems a bit of a strange way to go about things, but if needs must:
> 
> > names(df) <- unlist(coltitles)
> > df
>   col number one col number two col number three col number four
> 1              1              2                3               4
> 2              2              3                4               5
> 3              3              4                5               6
> 4              4              5                6               7
> 5              5              6                7               8
> > names(df)
> [1] "col number one"   "col number two"   "col number three" "col number four"
> 
> If your data frame with the names in the one (and only) row (why store
> this as a one row df and not a character vector??? [1]) then by
> unlisting it we get a (or something that can be coerced to) a character
> vector of the correct names.
> 
> If coltitles contains more rows, then:
> 
> names(df) <- unlist(coltitles[1,])
> 
> might be more appropriate.
> 
> HTH
> 
> G
> 
> [1] Your df storage of names is soooo inefficient (for this task):
> > object.size(names(df)) # after running the above code
> 312 bytes
> > object.size(coltitles)
> 2728 bytes
> 
> 
> 
> > 
> > Thanks in advance,
> > 
> > Tom
> > 
> > Beyond Hotmail - see what else you can do with Windows Live. Find out more.
> > _________________________________________________________________
> > 
> > 
> > 	[[alternative HTML version deleted]]
> > 
> > ______________________________________________
> > 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.
> -- 
> %~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%
>  Dr. Gavin Simpson             [t] +44 (0)20 7679 0522
>  ECRC, UCL Geography,          [f] +44 (0)20 7679 0565
>  Pearson Building,             [e] gavin.simpsonATNOSPAMucl.ac.uk
>  Gower Street, London          [w] http://www.ucl.ac.uk/~ucfagls/
>  UK. WC1E 6BT.                 [w] http://www.freshwaters.org.uk
> %~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%
> 

_________________________________________________________________
[[elided Hotmail spam]]

	[[alternative HTML version deleted]]


