[R] How to convert an ftable object to a matrix including the row names?

Brian Diggs diggsb at ohsu.edu
Fri May 27 18:28:28 CEST 2011


On 5/26/2011 11:54 PM, Marius Hofert wrote:
> Dear Prof. Ripley,
>
> many thanks for your quick reply.
>
> A character matrix (although clearly not very elegant) would be no problem, xtable deals
> with that.
> I tried as.data.frame() before, but if one wants to have the same rows
> as in ft, one has to use additional commands (?):
> ft # =>  16 rows
> as.data.frame(ft) # =>  32 rows; different order
> Is there a simple way to get the same order of the variables as in ft?

I think what you are looking for is format. That gives a character 
matrix which is the formatted rows and columns that you see printed (it 
is, in fact, the function that print.ftable uses).  That character 
matrix can be passed to xtable easily.

> Cheers,
>
> Marius
>
> On 2011-05-27, at 08:17 , Prof Brian Ripley wrote:
>
>> as.data.frame(ft)
>>
>> seems straightforward enough.
>>
>> I don't think you actually want a matrix, as they would have to be a character matrix and the ftable object is numeric.
>>
>> On Fri, 27 May 2011, Marius Hofert wrote:
>>
>>> Dear expeRts,
>>>
>>> What's the easiest way to convert an ftable object to a matrix such that the
>>> row names of the ftable object are shown in the first couple of columns of the
>>> matrix? This is (typically) required, for example, when the final goal is to print
>>> the matrix via xtable.
>>>
>>> Below is a rather complicated example of how to do it...
>>>
>>> Cheers,
>>>
>>> Marius
>>>
>>> ## Goal: convert an ftable() to a (character) matrix including the row names of
>>> ##       the ftable object as columns in the matrix (so that the matrix can be
>>> ##       nicely printed with xtable() for example)
>>> (ft<- ftable(Titanic, row.vars=1:3)) # ftable object
>>> rn<- attr(ft, "row.vars") # pick out rownames
>>> rn.<- rn[length(rn):1] # unfortunately, we have to (?) change the order due to expand.grid()
>>> g<- expand.grid(rn.) # build the 3 columns containing the row names
>>> (g.<- g[,length(rn):1]) # change order back; now contains the same row names as ft
>>> (ft.mat<- as.matrix(ft)) # convert ftable object to a matrix
>>> ## now, cbind g. and ft.mat
>>> cbind(g., ft.mat) # =>  now the rownames are there twice! ... although dim(ft.mat)==c(16, *2*)
>>> ## class(g.) =>  okay, probably we meant:
>>> (res<- cbind(as.matrix(g.), ft.mat))
>>> require(xtable)
>>> xtable(res)
>>> ______________________________________________
>>> R-help at r-project.org mailing list
>>> https://stat.ethz.ch/mailman/listinfo/r-help
>>> PLEASE do read the posting guide http://www.R-project.org/posting-guide.html
>>> and provide commented, minimal, self-contained, reproducible code.
>>>
>>
>> --
>> 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
>


-- 
Brian S. Diggs, PhD
Senior Research Associate, Department of Surgery
Oregon Health & Science University



More information about the R-help mailing list