I am trying to make a data block with the maximum number of records at a time. I need a data frame with 4 rows (one for each G) with max for X in this group and the corresponding value of Y. I know that I could write a loop, but would prefer.
Data<-data.frame(X=rnorm(200), Y=rnorm(200), G=rep(c(1,2,3,4), each=50))
XMax<-tapply(Data$X, Data$G, function(x){max(x, na.rm=T)})
WhichXMax<-tapply(Data$X, Data$G, function(x){which.max(x)})
The which.max function returns the row number after the data was a subset with a tapply coefficient, where I really want the row number to refer to the rows of data. So I could do something like:
YMax<-Data$Y[Which]
MaxData<-data.frame(XMax=XMax, YMax=YMax, G=levels(Data$G))
source
share