[R] Need to abstract changing name of column within loop
jctoll
jctoll at gmail.com
Thu Mar 17 22:29:17 CET 2011
On Thu, Mar 17, 2011 at 10:32 AM, Joshua Ulrich <josh.m.ulrich at gmail.com> wrote:
> 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,
>>
> Joshua Ulrich | FOSS Trading: www.fosstrading.com
Thank you, that does help. It sounds like your way is similar to the
way David suggested. At least now I can just resign myself to doing
it that way rather than torturing my mind trying to figure out a
shorter way.
Thanks,
James
More information about the R-help
mailing list