# [R] NA in table with integer types

Petr Pikal petr.pikal at precheza.cz
Fri Apr 8 16:12:40 CEST 2005

```
On 8 Apr 2005 at 14:20, Prof Brian Ripley wrote:

> On Fri, 8 Apr 2005, Paul Rathouz wrote:
>
> >
> > OK.  Thanks.  So, if you use table() on a factor that contains NA's,
> > but for which NA is not a level, is there any way to get table to
> > generate an entry for the NAs?  For example, in below, even
> > "exclude=NULL" will not give me an entry for <NA> on the factor y:

Hi

Use exclude in factor not in table

> x<-sample(1:3, 10, replace=T)
> x[5:6]<-NA
> table(x)
x
1 2 3
5 2 1
> y<-factor(x)
> y
[1] 1    1    2    3    <NA> <NA> 1    1    2    1
Levels: 1 2 3
> table(y) # no entry for NA
y
1 2 3
5 2 1
> factor(y,exclude=NULL) #make NA a level in factor y
[1] 1    1    2    3    <NA> <NA> 1    1    2    1
Levels: 1 2 3 NA

> table(y) # shows you entry for NA
y
1    2    3 <NA>
5    2    1    2

>
> I think this very clear from the help page:
>
>   exclude: values to use in the exclude argument of 'factor' when
>            interpreting non-factor objects; if specified, levels to
>            remove from all factors in ....
>
>       Only when 'exclude' is specified (i.e., not by default), will
>       'table' drop levels of factor arguments potentially.
>
> and you cannot remove a level that is not there.
>
> You seem to be persisting in not understanding: 'exclude' is supposed
> to be the same type as x (or its levels), and you have given logical
> and numeric values, not character ones.
>
>
>
> >> x <- c(1,2,3,3,NA)
> >> y <- factor(x)
> >> y
> > [1] 1    2    3    3    <NA>
> > Levels: 1 2 3
> >> table(y,exclude=NA)
> > y
> > 1 2 3
> > 1 1 2
> >> table(y,exclude=NaN)
> > y
> > 1 2 3
> > 1 1 2
> >> table(y,exclude=NULL)
> > y
> > 1 2 3
> > 1 1 2
> >
> > On Fri, 8 Apr 2005, Prof Brian Ripley wrote:
> >
> >> NaN only applies to double values: there is no integer NaN (nor Inf
> >> nor -Inf).  The difference is clear from
> >>
> >>> factor(x, exclude=NaN)
> >> [1] 1    2    3    3    <NA>
> >> Levels: 1 2 3 <NA>
> >>> factor(as.integer(x), exclude=NaN)
> >> [1] 1    2    3    3    <NA>
> >> Levels: 1 2 3
> >>
> >> If you read ?factor it says
> >>
> >>   exclude: a vector of values to be excluded when forming the set
> >>   of
> >>            levels. This should be of the same type as 'x', and will
> >>            be coerced if necessary.
> >>
> >> and as.integer(NaN) is integer NA.  So  factor(as.integer(x),
> >> exclude=NaN) is the same as  factor(as.integer(x), exclude=NA).
> >>
> >
> > [rest deleted]
> >
> > ====================================================================
> > ====== Paul Rathouz, Assoc. Professor       ph   773-834-1970 Dept.
> > of Health Studies, Rm. W-264   fax  773-702-1979 University of
> > Chicago                prathouz at health.bsd.uchicago.edu 5841 S.
> > Maryland Ave. MC 2007 Chicago, IL  60637
> > ====================================================================
> > ======
> >
> >
>
> --
> Brian D. Ripley,                  ripley at stats.ox.ac.uk
> Professor of Applied Statistics,  http://www.stats.ox.ac.uk/~ripley/
> University of Oxford,             Tel:  +44 1865 272861 (self) 1 South
> Parks Road,                     +44 1865 272866 (PA) Oxford OX1 3TG,
> UK                Fax:  +44 1865 272595
>
> ______________________________________________
> R-help at stat.math.ethz.ch mailing list
> https://stat.ethz.ch/mailman/listinfo/r-help
> http://www.R-project.org/posting-guide.html

Petr Pikal
petr.pikal at precheza.cz

```