[R] subscripting in data frames with NA

Agustin Lobo aloboaleu at gmail.com
Tue Jun 24 12:07:12 CEST 2008


Dear list:

Given
 > str(b3)
'data.frame':	159 obs. of  6 variables:
  $ index_pollution : num   8.228 10.513  0.549  0.915 10.416 ...
  $ position_descrip: chr  "2" "2" "2" NA ...
  $ position_geo    : chr  "3" "0" "3" "3" ...
  $ institution     : Factor w/ 3 levels "digesa","mem",..: 3 3 3 3 3 3 
3 3 3 3 ...
  $ p_desc_no3      : chr  "2" "2" "2" NA ...
  $ p_geo_no3       : chr  "3" "0" "3" "3" ...

I try to subscript but get:

 > b3[b3[,3]=="3",5] <-NA
Error in `[<-.data.frame`(`*tmp*`, b3[, 3] == "3", 5, value = NA) :
   missing values are not allowed in subscripted assignments of data frames

Why? What's  the correct way of doing this operation?

Actually, I previously tried with:
 > str(b2)
'data.frame':	159 obs. of  6 variables:
  $ index_pollution : num   8.228 10.513  0.549  0.915 10.416 ...
  $ position_descrip: Factor w/ 3 levels "0","1","2": 3 3 3 NA NA NA 3 3 
3 3 ...
  $ position_geo    : Factor w/ 4 levels "0","1","2","3": 4 1 4 4 3 NA 3 
3 3 4 ...
  $ institution     : Factor w/ 3 levels "digesa","mem",..: 3 3 3 3 3 3 
3 3 3 3 ...
  $ p_desc_no3      : Factor w/ 3 levels "0","1","2": 3 3 3 NA NA NA 3 3 
3 3 ...
  $ p_geo_no3       : Factor w/ 4 levels "0","1","2","3": 4 1 4 4 3 NA 3 
3 3 4 ...

 > table(b2$p_desc_no3)

  0  1  2
42 44 66

and

 > levels(b2$p_desc_no3)[levels(b2$position_geo)=="3"] <- NA

which does not result into error but leaves b2$p_desc_no3 unchanged:

 > table(b2$p_desc_no3)

  0  1  2
42 44 66


what am i doing wrong?

Thanks

Agus



-- 
Dr. Agustin Lobo
Institut de Ciencies de la Terra "Jaume Almera" (CSIC)
LLuis Sole Sabaris s/n
08028 Barcelona
Spain
Tel. 34 934095410
Fax. 34 934110012
email: Agustin.Lobo at ija.csic.es
http://www.ija.csic.es/gt/obster



More information about the R-help mailing list