Re: [R] Need to abstract changing name of column within loop

From: Joshua Ulrich <josh.m.ulrich_at_gmail.com>
Date: Thu, 17 Mar 2011 10:32:25 -0500

On Wed, Mar 16, 2011 at 6:58 PM, jctoll <jctoll_at_gmail.com> wrote:
> Hi,
>
> I'm struggling to figure out the way to change the name of a column
> from within a loop.  The problem is I can't refer to the object by its
> actual variable name, since that will change each time through the
> loop.  My xts object is A.
>
>> head(A)
>           A.Open A.High A.Low A.Close A.Volume A.Adjusted A.Adjusted.1
> 2007-01-03  34.99  35.48 34.05   34.30  2574600      34.30  11867800000
> 2007-01-04  34.30  34.60 33.46   34.41  2073700      34.41  11905860000
> 2007-01-05  34.30  34.40 34.00   34.09  2676600      34.09  11795140000
> 2007-01-08  33.98  34.08 33.68   33.97  1557200      33.97  11753620000
> 2007-01-09  34.08  34.32 33.63   34.01  1386200      34.01  11767460000
> 2007-01-10  34.04  34.04 33.37   33.70  2157400      33.70  11660200000
>
> It's column names are:
>> colnames(A)
> [1] "A.Open"       "A.High"       "A.Low"        "A.Close"
> "A.Volume"     "A.Adjusted"   "A.Adjusted.1"
>
> I want to change the 7th column name:
>> colnames(A)[7]
> [1] "A.Adjusted.1"
>
> I need to do that through a reference to i:
>> i
> [1] "A"
>
> This works:
>> colnames(get(i))[7]
> [1] "A.Adjusted.1"
>
> And this is what I want to change the column name to:
>> paste(i, ".MarketCap", sep = "")
> [1] "A.MarketCap"
>
> But how do I make the assignment?  This clearly doesn't work:
>
>> colnames(get(i))[7] <-  paste(i, ".MarketCap", sep = "")
> Error in colnames(get(i))[7] <- paste(i, ".MarketCap", sep = "") :
>  could not find function "get<-"
>
> Nor does this (it creates a new object "A.Adjusted.1" with a value of
> "A.MarketCap") :
>
> assign(colnames(get(i))[7], paste(i, ".MarketCap", sep = ""))
>
> How can I change the name of that column within my big loop?  Any
> ideas?  Thanks!
>
I usually make a copy of the object, change it, then overwrite the original:

tmp <- get(i)
colnames(tmp)[7] <- "foo"
assign(i,tmp)

Hope that helps.

> Best regards,
>
>
> James
>
> ______________________________________________
> 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.
>

--
Joshua Ulrich  |  FOSS Trading: www.fosstrading.com

______________________________________________
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.
Received on Thu 17 Mar 2011 - 15:40:57 GMT

Archive maintained by Robert King, hosted by the discipline of statistics at the University of Newcastle, Australia.
Archive generated by hypermail 2.2.0, at Thu 17 Mar 2011 - 23:40:23 GMT.

Mailing list information is available at https://stat.ethz.ch/mailman/listinfo/r-help. Please read the posting guide before posting to the list.

list of date sections of archive