[R] Proper Syntax for Logical Subset in Subset()

Rich Shepard rshepard at appl-ecosys.com
Wed Nov 2 17:39:13 CET 2011


   I have measured values for 47 chemicals in a stream. After processing
the original data frame through reshape2, the recast data frame has this
structure:

'data.frame':	256 obs. of  47 variables:
  $ site     : Factor w/ 143 levels "BC-0.5","BC-1",..: 1 1 1 2 2 2 2 2 2 2
...
  $ sampdate : Date, format: "1996-04-19" "1996-05-21" ...
  $ Acid     : num  NA NA NA NA NA NA NA NA NA NA ...
  $ Ag       : num  NA NA NA NA NA NA NA NA NA NA ...
  $ Al       : num  0.07 NA NA NA NA NA NA NA NA NA ...
  $ Alk-HO   : num  NA NA NA NA NA NA NA NA NA NA ...
  $ Alk-Tot  : num  162 152 212 NA NA NA NA NA NA NA ...
  $ As       : num  0.01 NA NA 0 0 0 0 0.01 0 0.01 ...
  $ Ba       : num  0.18 NA NA NA NA NA NA NA NA NA ...
  $ Be       : num  NA NA NA NA NA NA NA NA NA NA ...
  $ Bo       : num  NA NA NA NA NA NA NA NA NA NA ...
  $ CO3      : num  NA NA NA NA NA NA NA NA NA NA ...
  $ Ca       : num  76.6 NA NA NA NA ...
  $ Cd       : num  NA NA NA NA NA NA NA NA NA NA ...
  $ Cl       : num  12 NA NA NA NA NA NA NA NA NA ...
  $ Cn       : num  NA NA NA NA NA NA NA NA NA NA ...
  $ Co       : num  NA NA NA NA NA NA NA NA NA NA ...
  $ Cond     : num  712 403 731 NA NA NA NA NA NA NA ...
  $ Cr       : num  NA NA NA NA NA NA NA NA NA NA ...
  $ DO       : num  NA NA NA NA NA NA NA NA NA NA ...
  $ F        : num  NA NA NA NA NA NA NA NA NA NA ...
  $ Fe       : num  0.06 NA NA NA NA NA NA NA NA NA ...
  $ Flow     : num  NA NA NA NA NA NA NA NA NA NA ...
  $ HCO3     : num  162 152 212 NA NA NA NA NA NA NA ...
  $ Hg       : num  0 NA NA NA NA NA NA NA NA NA ...
  $ K        : num  1.7 NA NA NA NA NA NA NA NA NA ...
  $ Mg       : num  43.2 NA NA NA NA ...
  $ Mn       : num  NA NA NA NA NA NA NA NA NA NA ...
  $ NO2-N    : num  NA NA NA NA NA NA NA NA NA NA ...
  $ NO3-N    : num  NA 0.47 0.09 NA NA NA NA NA NA NA ...
  $ NO3-NO2-N: num  1.97 NA NA NA NA NA NA NA NA NA ...
  $ Na       : num  NA NA NA NA NA NA NA NA NA NA ...
  $ Ni       : num  NA NA NA NA NA NA NA NA NA NA ...
  $ OH       : num  NA NA NA NA NA NA NA NA NA NA ...
  $ P        : num  0.03 NA NA NA NA NA NA NA NA NA ...
  $ Pb       : num  NA NA NA NA NA NA NA NA NA NA ...
  $ SO4      : num  175 57 194 NA NA NA NA NA NA NA ...
  $ Sb       : num  0 NA NA NA NA NA NA NA NA NA ...
  $ Se       : num  0.01 NA NA NA NA NA NA NA NA NA ...
  $ Si       : num  NA NA NA NA NA NA NA NA NA NA ...
  $ TDS      : num  460 212 530 NA NA NA NA NA NA NA ...
  $ TSS      : num  NA 26 NA NA NA NA NA NA NA NA ...
  $ Temp     : num  NA NA NA NA NA NA NA NA NA NA ...
  $ Tl       : num  NA NA NA NA NA NA NA NA NA NA ...
  $ Turb     : num  2.2 NA NA NA NA NA NA NA NA NA ...
  $ Zn       : num  0.02 NA NA NA NA NA NA NA NA NA ...
  $ pH       : num  8.12 8.19 8.46 NA NA NA NA NA NA NA ...

   I want a subset of this with only 7 chemicals: Ca, Cl, Cond, Mg, Na, SO4,
and TDS. The subset help page tells me that I can use a logical subset to
extract these 7 rows while keeping all columns, but I do not know how to
write that logical subset. I tried emulating the example on the help page of
avoiding the subset but R didn't like the '%in%' as I wrote it; putting the
desired row names in a subset vector fails:

burns.tds <- subset(burns.cast, subset(c('Ca', 'Cl', 'Cond', 'Mg', 'Na',
'SO4', 'TDS')))
Error in subset.default(c("Ca", "Cl", "Cond", "Mg", "Na", "SO4", "TDS")) :
   argument "subset" is missing, with no default

   What is the proper syntax to extract only these rows into a new data
frame? And, is the recast data frame the appropriate format as the source?

Rich



More information about the R-help mailing list