[R] Conditional selection of rows

F Z gerifalte28 at hotmail.com
Tue Nov 9 19:48:39 CET 2004


Many thanks to Gabor Grothendieck, Thomas Lumley and James Holtman for their 
useful answers on this thread.  The three solutions worked for the problem.  
Here is a sumary of their responses (modified for consistency on notations):


>F Z <gerifalte28 <at> hotmail.com> writes:
>: Hi,
>:
>: I have a data.frame with several variables and 50,000 observations.
>: i.e.
>: data[1:2,1:7]
>:   Iteration Day Production.Type tsUSusc tsASusc tsULat tsALat
>:          1   0         Generic   17965 8833053      0      0
>:          1   1         Generic   17965 8833053      0      0
>:          .
>:          .
>:          .
>:          1 199         Generic   17237 8141028     26  23131
>:          2 127         Generic   15828 7307583     92  63463
>:
>: I would like to extract only the observations (rows) for the last "day" 
>for
>: each "iteration" and store them in a data frame.

Gabor Grothendieck's solution:


subset<-do.call("rbind", by(data, data$Iteration, tail, 1))


James Holtman's solution:

subset<- by(data, data$Iteration, function(x)x[nrow(x),])
subset<-do.call('rbind',subset)

Thomas Lumley's solution:

data <- data[order(data$Iteration, data$Day, decreasing=TRUE),]

subset <- data[!duplicated(data$Iteration),]

If you are sure that the data are in order to begin with you could just 
reverse the entire data set (  data <- data[nrow(data):1,] ), but I'm always 
reluctant to assume this.



>______________________________________________
>R-help at stat.math.ethz.ch mailing list
>https://stat.ethz.ch/mailman/listinfo/r-help
>PLEASE do read the posting guide! 
>http://www.R-project.org/posting-guide.html




More information about the R-help mailing list