[R] ftable: how to replace NA and format entries without changing their mode?

David Winsemius dwinsemius at comcast.net
Sat May 28 15:22:55 CEST 2011


Received your offlist question and see that I did not understand your  
request. See below for another alternative
On May 28, 2011, at 7:53 AM, David Winsemius wrote:

>
> On May 28, 2011, at 7:19 AM, Marius Hofert wrote:
>
>> Dear all,
>>
>> another ftable problem, now related to formatC.
>> One typically would like to format entries in an ftable (adjust  
>> digits, replace NA, ...)
>> before format() is applied to convert the formatted ftable to an  
>> object which
>> xtable can deal with. The output of xtable can then be used within  
>> a LaTeX table.
>
> > 1/3
> [1] 0.3333333
> > options(digits=3)
> > 1/3
> [1] 0.333
>
>>
>> The problem I face is that the ftable entries [numeric] change  
>> their mode when
>> one of the operations "adjust digits" or "replace NA" is applied.  
>> Here is a
>> minimal example:
>>
>> ## first adjusting the format, then trying to remove NA
>> (ft <- ftable(Titanic)) # ftable
>> ft[1,1] <- NA # create an NA entry to show the behavior
>> is.numeric(ft) # => is numeric
>> ft. <- formatC(ft, digits=1, format="f") # adjust format
>> is.numeric(ft.) # => not numeric anymore => one can not further use  
>> is.na() etc.
>> # ft.[is.na(ft.)] <- "my.Command.To.Deal.With.NA" # does not work  
>> because is.na() does not find NA
>> ft. # (of course) still contains NA

If you want to replace an entry in a character-mode table whose value  
== "NA" (which is not a special missing value in that mode)

 > is.na("NA")
[1] FALSE
 > is.na(NA_character_)
[1] TRUE

.... , then this should work:

ft.[which(ft.=="NA")] <- "my.Command.To.Deal.With.NA"
ft.
                    Survived                          
No                        Yes
Class Sex    Age
1st   Male   Child          my.Command.To.Deal.With.NA 5.0
              Adult          118.0                      57.0
       Female Child          0.0                        1.0
              Adult          4.0                        140.0
2nd   Male   Child          0.0                        11.0
              Adult          154.0                      14.0
       Female Child          0.0                        13.0
              Adult          13.0                       80.0
3rd   Male   Child          35.0                       13.0
              Adult          387.0                      75.0
       Female Child          17.0                       14.0
              Adult          89.0                       76.0
Crew  Male   Child          0.0                        0.0
              Adult          670.0                      192.0
       Female Child          0.0                        0.0
              Adult          3.0                        20.0


Although this messes up the header alignment. At least it "finds" the  
"NA".
-- 
David.

>>
>> ## first remove NA, then trying to adjust the format
>> (ft <- ftable(Titanic)) # ftable
>> ft[1,1] <- NA
>> # ft[is.na(ft)] <- "my.LaTeX.Code.To.Deal.With.NA"
>> is.character(ft) # => now character, adjusting the format of the  
>> numbers with formatC not possible anymore
>> ft
>> formatC(ft, digits=1, format="f") # (of course) not working anymore
>>
>> How can I accomplish both (example-)tasks without changing the mode
>> of the ftable entries?
>> Note: I would like to keep the ftable structure since this nicely  
>> converts to a
>> LaTeX table later on.
>>
>> Cheers,
>>
>> Marius.

David Winsemius, MD
West Hartford, CT



More information about the R-help mailing list