On Wed, Dec 10, 2008 at 4:09 PM, Patrizio Frederic <[EMAIL PROTECTED]> wrote: > hi all, > I have a data frame such as: > > 1 blue 0.3 > 1 NA 0.4 > 1 red NA > 2 blue NA > 2 green NA > 2 blue NA > 3 red 0.5 > 3 blue NA > 3 NA 1.1 > > I wish to find the last non-missing value in every 3ple: ie I want a 3 > by 3 data.frame such as: > > 1 red 0.4 > 2 blue NA > 3 blue 1.1 > > I have written a little script > > data = structure(list(V1 = c(1L, 1L, 1L, 2L, 2L, 2L, 3L, 3L, 3L > ), V2 = structure(c(1L, NA, 3L, 1L, 2L, 1L, 3L, 1L, NA), .Label = c("blue", > "green", "red"), class = "factor"), V3 = c(0.3, 0.4, NA, NA, > NA, NA, 0.5, NA, 1.1)), .Names = c("V1", "V2", "V3"), class = > "data.frame", row.names = c(NA, > -9L)) > > cl = function(x) x[max(which(!is.na(x)))]
It's easily to do this with ddply from plyr: library(plyr) ddply(data, .(V1), colwise(cl)) In brief, this says to take the data frame called data and break it up into pieces defined by the variable V1. Then for each piece, calculate cl for each column, and then join all the pieces back together. Hadley -- http://had.co.nz/ ______________________________________________ R-help@r-project.org mailing list https://stat.ethz.ch/mailman/listinfo/r-help PLEASE do read the posting guide http://www.R-project.org/posting-guide.html and provide commented, minimal, self-contained, reproducible code.