[R] dividing values of each column in a dataframe
Rolf Turner
rolf.turner at xtra.co.nz
Tue Feb 7 00:09:56 CET 2012
I believe your post is misleading. Your example "works"
purely by chance.
R uses "column ordering", so entries 1 to 3 of column 1 in your
example get divided by 2, 3, and 4 respectively. Then "scal" is
*recycled* and entries 4, 5, and 6, get divided by 2, 3, and 4
respectively, and so on.
It just *happens* that entry 4 of column 1 gets divided by 2,
entry 4 of column 2 gets divided by 3, and entry 4 of column 3
gets divided by 4, giving the impression that you are getting
what you want. But if you look at row 5 of your "df" you'll see
something different.
# The same (due to serendipity --- or it's converse!):
> (df/scal)[4,]
a b c
4 0.0156342 0.03288247 0.02057588
> df[4,]/scal
a b c
4 0.0156342 0.03288247 0.02057588
# Not the same!
> (df/scal)[5,]
a b c
5 0.07904605 0.01585556 0.4562085
> df[5,]/scal
a b c
5 0.1185691 0.02114075 0.2281042
As has already been pointed out in this thread, to get what you think
you're getting, you need to use transpose t(t(df)/scal).
cheers,
Rolf Turner
On 07/02/12 08:54, Berend Hasselman wrote:
> On 06-02-2012, at 20:22, Abhishek Pratap wrote:
>
>> Hey Guys
>>
>> I want to divide(numerically) all the columns of a data frame by
>> different numbers. Here is what I am doing but getting a weird error.
> I don't think you are getting an error.
> You are getting an unexpected result (you think).
>
>> The values in each column are not getting divided by the corresponding
>> value in the denominator vector instead by the alternative values. I
>> am sure I am messing up something.
>>
>> Appreciate your help
>> -Abhi
>>
>> head(counts)
>> WT_CON WT_RB MU_CON MU_RB
>> row1 839 180 477 187
>>
>>
>> head(counts/c(2,3,4,5))
>> WT_CON WT_RB MU_CON MU_RB
>> row1 419.50000 45.0000 238.5000 46.7500
> I tried this
>
> df<- data.frame(a=runif(10),b=runif(10),c=runif(10))
> scal<- c(2,3,4)
>
>> df
> a b c
> 1 0.47661685 0.73457617 0.90045279
> 2 0.06916502 0.76374600 0.07630196
> 3 0.17029174 0.29450289 0.07416969
> 4 0.03126839 0.09864740 0.08230353
> 5 0.23713816 0.06342224 0.91241698
> 6 0.21970595 0.86890690 0.47316101
> 7 0.46380324 0.26142304 0.87823277
> 8 0.81256517 0.76097474 0.98956553
> 9 0.74425369 0.29228545 0.27496707
> 10 0.65425285 0.40166967 0.12231213
>
>> df/scal
> a b c
> 1 0.23830843 0.24485872 0.22511320
> 2 0.02305501 0.19093650 0.03815098
> 3 0.04257293 0.14725144 0.02472323
> 4 0.01563419 0.03288247 0.02057588
> 5 0.07904605 0.01585556 0.45620849
> 6 0.05492649 0.43445345 0.15772034
> 7 0.23190162 0.08714101 0.21955819
> 8 0.27085506 0.19024369 0.49478276
> 9 0.18606342 0.14614273 0.09165569
> 10 0.32712642 0.13388989 0.03057803
>
> Checking:
>> df[4,]/scal
> a b c
> 4 0.01563419 0.03288247 0.02057588
>
>
> This is what you want guessing from your description.
> You haven't given us an example with desired output.
>
> Berend
>
> ______________________________________________
> 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.
>
More information about the R-help
mailing list