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.

Reply via email to