Skip to content

NA in table with integer types

6 messages · Paul Rathouz, Brian Ripley, Gabor Grothendieck +1 more

#
Hi -- I am having the following problem with table() when applied to
vectors of type (mode) integer.  When I use the table() command, I can
*only obtain an entry in the table for NA values by using exclude=NULL*.
Just issuing exclude=NaN will not do it.  See below, where x is double at
first, and then coerced to integer and notice the difference.  Is this a
bug or is there something that I do not understand about the integer data
type?  That is, is there some other value besides NA and NaN that "missing
integers" take? Thanks -- pr

------------------------------
[1] TRUE
x
1 2 3
1 1 2
x
   1    2    3 <NA>
   1    1    2    1
x
   1    2    3 <NA>
   1    1    2    1
[1]  1  2  3  3 NA
[1] FALSE FALSE FALSE FALSE  TRUE
[1] TRUE
x
1 2 3
1 1 2
x
1 2 3
1 1 2
x
   1    2    3 <NA>
   1    1    2    1
_
platform powerpc-apple-darwin6.8
arch     powerpc
os       darwin6.8
system   powerpc, darwin6.8
status
major    2
minor    0.1
year     2004
month    11
day      15
language R
------------------------------

==========================================================================
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
#
NaN only applies to double values: there is no integer NaN (nor Inf nor 
-Inf).  The difference is clear from
[1] 1    2    3    3    <NA>
Levels: 1 2 3 <NA>
[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).
On Thu, 7 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:
[1] 1    2    3    3    <NA>
Levels: 1 2 3
y
1 2 3
1 1 2
y
1 2 3
1 1 2
y
1 2 3
1 1 2
On Fri, 8 Apr 2005, Prof Brian Ripley wrote:

            
[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
#
On Apr 8, 2005 9:05 AM, Paul Rathouz <prathouz at health.bsd.uchicago.edu> wrote:
summary(y)
#
On Fri, 8 Apr 2005, Paul Rathouz wrote:

            
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.

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

            
Hi

Use exclude in factor not in table
x
1 2 3 
5 2 1
[1] 1    1    2    3    <NA> <NA> 1    1    2    1   
Levels: 1 2 3
y
1 2 3 
5 2 1
[1] 1    1    2    3    <NA> <NA> 1    1    2    1   
Levels: 1 2 3 NA
y
   1    2    3 <NA> 
   5    2    1    2
Petr Pikal
petr.pikal at precheza.cz