[R] repeated searching of no-missing values
    hadley wickham 
    h.wickham at gmail.com
       
    Thu Dec 11 00:49:33 CET 2008
    
    
  
On Wed, Dec 10, 2008 at 4:09 PM, Patrizio Frederic
<frederic.patrizio at gmail.com> 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/
    
    
More information about the R-help
mailing list