[R] loop help

Rolf Turner r.turner at auckland.ac.nz
Wed Jun 17 05:50:44 CEST 2009


On 17/06/2009, at 3:12 PM, ddepew at sciborg.uwaterloo.ca wrote:

> Hi all,
> I'm stuck trying to get syntax correct for the follwing type of loop.
> I would like to find the column with the largest value in a given row,
> and create a new column with a categorical variable indicating which
> column the highest value of "i" comes from.
>
> too=data.frame(A=rnorm(10,1),B=rnorm(10,2),C=rnorm(10,1.5))
> too$large=0
> too$large=for (i in 1:length(too[,c(1,2,3)])) {
>                                     if (too$A[i] > too$B[i] &
> too$C[i]) {too$large[i]=1} else
>                                     if (too$B[i] > too$A[i] &
> too$C[i]) {too$large[i]=2} else
>                                     if (too$C[i] > too$A[i] &
> too$B[i]) {too$large[i]=3}}
>
> Ultiamtely this is not working for me, any hints would be much  
> appreciated!

Hints:

(1) Use the tools and facilities that R provides.  Take some time to  
learn
about them.  It will pay off, big-time.

(2) Whatever anyone else may tell you, ***DON'T*** use ``='' for  
assignment.
That way lies peril.  Use ``<-'' as God intended. :-)

(3) The solution to your immediate problem is exemplified by:

set.seed(42)
too <- data.frame(A=rnorm(10,1),B=rnorm(10,2),C=rnorm(10,1.5))
too$large <- apply(too,1,which.max)
too
            A          B          C large
1  2.3709584  3.3048697  1.1933614     2
2  0.4353018  4.2866454 -0.2813084     2
3  1.3631284  0.6111393  1.3280826     1
4  1.6328626  1.7212112  2.7146747     3
5  1.4042683  1.8666787  3.3951935     3
6  0.8938755  2.6359504  1.0695309     2
7  2.5115220  1.7157471  1.2427306     1
8  0.9053410 -0.6564554 -0.2631631     1
9  3.0184237 -0.4404669  1.9600974     1
10 0.9372859  3.3201133  0.8600051     2

	cheers,

		Rolf Turner


######################################################################
Attention:\ This e-mail message is privileged and confid...{{dropped:9}}




More information about the R-help mailing list