Hi all, I've spent too long in matlab land recently and seem to have forgotten my R skillz ;-) I'm sure I'm missing a simple way to do this... Given a data frame id<-rep(1:5,2) eye<-c(rep('l',5),rep('r',5)) age<-rep(round(runif(5,0,12)),2) response<-round(runif(10,1,10)*10)/10 response2<-sample(c('High','Low'),10,replace=TRUE) data<-data.frame(id,eye,age,response,response2) I want to create a new dataset averaging the response variable from both eyes for each test. I know there are many ways to do this but... I would also like to keep the value of the response2 variable for the left eye. ending up with the dataset id age response response2 1 9 3.65 High 2 10 3.85 High 3 8 8.15 Low 4 4 4.4 Low 5 0 4.6 High I thought something like f<-function(x){#make my choices here} aggregate(data,list(data$id),f) but x only seems to contain the first column of data. I could probably have done this manually in the time spent writing this email. any help appreciated, Tom