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}}