[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