Hi, I am wondering if anyone can propose a simple/best way to do the following:

Let's say I have a data frame 

dat <- 
cbind(expand.grid(mode=c('right','left'),time=0:3,id=c('p1','p2','p3')),y=c(3,5,rep(4,6),6,2,rep(3,6),4,4,rep(2,6)))


dat
    mode time id y
1  right    0 p1 3
2   left    0 p1 5
3  right    1 p1 4
4   left    1 p1 4
5  right    2 p1 4
6   left    2 p1 4
7  right    0 p2 6
8   left    0 p2 2
9  right    1 p2 3
10  left    1 p2 3
11 right    2 p2 3
12  left    2 p2 3
13 right    0 p3 4
14  left    0 p3 4
15 right    1 p3 2
16  left    1 p3 2
17 right    2 p3 2
18  left    2 p3 2

Now I want to add a new column "type" to this data frame with values of either 
"left" or "right" for each "id" based on the following logic:

For each "id", the value of "type" column is the value of "mode" for which the 
value of "y" is the maximum of "y" based on time=0. For example for id=p1, the 
value of "type" is "left" because for the 2 "y" values (3 & 5) based on time=0, 
mode=left has the bigger "y" value (5). But if the 2 "y" values are the same for 
"mode", then let type=right.

In the end the new data frame is:

    mode time id y  type
1  right    0 p1 3  left
2   left    0 p1 5  left
3  right    1 p1 4  left
4   left    1 p1 4  left
5  right    2 p1 4  left
6   left    2 p1 4  left
7  right    0 p2 6 right
8   left    0 p2 2 right
9  right    1 p2 3 right
10  left    1 p2 3 right
11 right    2 p2 3 right
12  left    2 p2 3 right
13 right    0 p3 4 right
14  left    0 p3 4 right
15 right    1 p3 2 right
16  left    1 p3 2 right
17 right    2 p3 2 right
18  left    2 p3 2 right

Any suggestions would be appreciated.

John


      
	[[alternative HTML version deleted]]

