[R] Conditional selection of rows

Thomas Lumley tlumley at u.washington.edu
Tue Nov 9 16:24:19 CET 2004


On Tue, 9 Nov 2004, F Z wrote:

> 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.
>
> I tried lapply nested in a for loop without success.  Any help will be 
> greatly appreciated!

If you reverse the ordering you are then looking for the first Day in each 
Iteration, which can be done efficiently with duplicated().

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.

 	-thomas




More information about the R-help mailing list