[R] using complete.cases() with nested factors

Ken Knoblauch ken.knoblauch at inserm.fr
Thu Sep 4 23:19:04 CEST 2008


Andrew Barr <wabarr <at> gmail.com> writes:
> This maybe a newbie question.  I have a dataframe 
that looks like the sample
> at the bottom of the email.  I have monthly 
precipitation data from several
> sites over several years.  For each site, 
I need to extract years that have
> a complete series of 12 monthly precipitation 
values, while excluding that
> year for sites with incomplete data.  
I can't figure out how to do this
> gracefully (i.e. without a silly for loop).  
Any help will be appreciate,
> thanks!
> SiteID    year    month    precip(mm)
> 670090    1941    jan    2998
> 670090    1941    feb    1299
> 670090    1941    mar    1007
> 670090    1941    apr    354
> 670090    1941    may    88
> 670090    1941    jun    156
> 670090    1941    jul    8
> 670090    1941    aug    4
> 670090    1941    sep    8
> 670090    1941    oct    58
> 670090    1941    nov    397
> 670090    1941    dec    248
> 670090    1942    jan    NA
> 670090    1942    feb    380
> 670090    1942    mar    797
> 670090    1942    apr    142
> 670090    1942    may    43
> 670090    1942    jun    14
> 670090    1942    jul    70
> 670090    1942    aug    51
> 670090    1942    sep    0
> 670090    1942    oct    10
> 670090    1942    nov    235
> 670090    1942    dec    405
> 
There are likely more elegant solutions but this seems to work.
If the data frame is in a variable named dd

lapply(unique(dd$year), function(x) {s <- subset(dd, year == x)
  if (nrow(s) == 12) s})



More information about the R-help mailing list