[R] Still can't find missing data - How do I get NA in xtabs with factors?

Rolf Turner r.turner at auckland.ac.nz
Wed Jun 3 02:39:58 CEST 2009


On 3/06/2009, at 12:03 PM, Farley, Robert wrote:

> The problem here is Table doesn't seem to have a way to weigh the  
> data.
>
>> ToyData
>     Data1 Data2  Data3 Weight
> 101   Sam   Red Banana    1.1
> 102   Sam Green Banana    2.1
> 103   Sam  Blue Orange    2.1
> 104  Fred   Red Orange    2.1
> 105  Fred Green  Guava    2.1
> 106  Fred  Blue  Guava    2.1
> 107  <NA>   Red   Pear   50.1
> 108  <NA> Green   Pear   50.1
> 109  <NA>  Blue   <NA> 1000.2
>> with(ToyData,table(Data1, Data3, useNA =  "ifany"))
>       Data3
> Data1  Banana Guava Orange Pear <NA>
>   Fred      0     2      1    0    0
>   Sam       2     0      1    0    0
>   <NA>      0     0      0    2    1
>> xtabs(Weight ~  Data1 + Data3, exclude=NULL, na.action=na.pass,  
>> ToyData)
>       Data3
> Data1  Banana Guava Orange Pear
>   Fred    0.0   4.2    2.1  0.0      Data3
> Data1  Banana  Guava Orange   Pear     NA
>   Fred    0.0    4.2    2.1    0.0    0.0
>   Sam     3.2    0.0    2.1    0.0    0.0
>   NA      0.0    0.0    0.0  100.2 1000.2
>   Sam     3.2   0.0    2.1  0.0

Why don't you just re-code your data replacing missing values (<NA>) in
your factors by the literal string "NA"?

E.g.:

revamp <- function(x){
if(!is.factor(x)) return(x)
l <- levels(x)
x <- as.character(x)
x[is.na(x)] <- "NA"
factor(x,levels=c(l,"NA"))
}

xxx <- as.data.frame(lapply(Toydata,revamp))
xtabs(Weight ~  Data1 + Data3, data=xxx)

       Data3
Data1  Banana  Guava Orange   Pear     NA
   Fred    0.0    4.2    2.1    0.0    0.0
   Sam     3.2    0.0    2.1    0.0    0.0
   NA      0.0    0.0    0.0  100.2 1000.2


	cheers,

		Rolf Turner


######################################################################
Attention:\ This e-mail message is privileged and confid...{{dropped:9}}




More information about the R-help mailing list