[R] Utilizing column names to multiply over all columns
Bert Gunter
gunter.berton at gene.com
Tue Aug 16 22:34:24 CEST 2011
Sorry, my second should be:
scale(mydf[,1:3],center = FALSE,
scale=1/as.numeric(names(mydf)[1:3])) ## ?scale
-- Bert
On Tue, Aug 16, 2011 at 1:30 PM, Bert Gunter <bgunter at gene.com> wrote:
> How about:
>
> as.matrix(mydf[,1:3]) %*% diag(as.numeric(names(mydf)[1:3]))
>
> or
>
> scale(mydf[,1:3],1/as.numeric(names(mydf)[1:3])) ## ?scale
>
> to create your new columns?
>
> -- Bert
>
> On Tue, Aug 16, 2011 at 1:13 PM, David Winsemius <dwinsemius at comcast.net> wrote:
>>
>> On Aug 16, 2011, at 3:37 PM, Sam Albers wrote:
>>
>>> ## Hello there,
>>> ## I have an issue where I need to use the value of column names to
>>> multiply with the individual values in a column and I have many
>>> columns to do this over. I have data like this where the column names
>>> are numbers:
>>>
>>> mydf <- data.frame(`2.72`=runif(20, 0, 125),
>>> `3.2`=runif(20, 50, 75),
>>> `3.78`=runif(20, 0, 100),
>>> yy= head(letters,2), check.names=FALSE)
>>
>>> mydf
>> 2.72 3.2 3.78 yy
>> 1 31.07874 74.48555 89.306591 a
>> 2 123.68290 74.30030 11.943576 b
>> 3 89.64024 68.26378 97.627211 a
>> 4 81.46604 59.79607 91.005217 b
>>
>>>
>>> ## I had been doing something like this but this seems rather tedious
>>> and clunky. These append the correct values to my dataframe but is
>>> there any way that I can do this generally over each column, also
>>> using each column name as the multiplier for that column?
>>>
>>> mydf$vd2.72 <- mydf$'2.72'*2.72
>>> mydf$vd3.2 <- mydf$'3.2'*3.2
>>> mydf$vd3.78 <- mydf$'3.78'*3.78
>>>
>>> ## So can I get to this point with a more generalized solution? For
>>> now, I would also prefer to keep this in wide format and I am aware
>>> (thanks to the list!) that I could use melt() to get the values I
>>> want.
>>
>> You will get the warning that last last column is not "going right" but
>> otherwise this returns what you asked for:
>>
>> sapply(1:length(mydf), function(i) mydf[[i]]* as.numeric(names(mydf)[i]) )
>> [,1] [,2] [,3] [,4]
>> [1,] 84.53416 238.3538 337.57891 NA
>> [2,] 336.41748 237.7610 45.14672 NA
>> [3,] 243.82145 218.4441 369.03086 NA
>> [4,] 221.58762 191.3474 343.99972 NA
>> [5,] 81.78911 213.0770 97.90072 NA
>> snipped remainder
>>
>> --
>>
>> David Winsemius, MD
>> West Hartford, CT
>>
>> ______________________________________________
>> 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.
>>
>
>
>
> --
> "Men by nature long to get on to the ultimate truths, and will often
> be impatient with elementary studies or fight shy of them. If it were
> possible to reach the ultimate truths without the elementary studies
> usually prefixed to them, these would not be preparatory studies but
> superfluous diversions."
>
> -- Maimonides (1135-1204)
>
> Bert Gunter
> Genentech Nonclinical Biostatistics
>
--
"Men by nature long to get on to the ultimate truths, and will often
be impatient with elementary studies or fight shy of them. If it were
possible to reach the ultimate truths without the elementary studies
usually prefixed to them, these would not be preparatory studies but
superfluous diversions."
-- Maimonides (1135-1204)
Bert Gunter
Genentech Nonclinical Biostatistics
More information about the R-help
mailing list