[R] Convert ftable to latex?

David Whiting david.whiting at ncl.ac.uk
Tue Aug 30 14:47:15 CEST 2005


Hi Fredrik,

What you need to do is to massage your table a little to get it into the
appropriate structure and then use the rgroup and n.rgroup options.
Here's an example using the Titanic data that come with R. Note that
this is not necessarily (or even remotely likely?) the best way to get
your data into the shape required, but hopefully it shows you what, in
general, you need to do. You might find that you don't need to use
ftable at all, you might find other ways of creating the table you need.
In the example below, note in particular what x and x2 look like.

> library(Hmisc)
> x <- ftable(Titanic, row.vars = 1:2)
> x
             Age      Child     Adult
             Survived    No Yes    No Yes
Class Sex
1st   Male                0   5   118  57
      Female              0   1     4 140
2nd   Male                0  11   154  14
      Female              0  13    13  80
3rd   Male               35  13   387  75
      Female             17  14    89  76
Crew  Male                0   0   670 192
      Female              0   0     3  20
> x.row.vars <- attr(x, "row.vars")
> col1 <- x.row.vars[[1]]
> col2 <- rep(x.row.vars[[2]], 4)
> x2 <- data.frame(sex=col2, x[ ,])
> colnames(x2) <- c("Sex", "No", "Yes", "No", "Yes")
> x2
     Sex No Yes  No Yes
1   Male  0   5 118  57
2 Female  0   1   4 140
3   Male  0  11 154  14
4 Female  0  13  13  80
5   Male 35  13 387  75
6 Female 17  14  89  76
7   Male  0   0 670 192
8 Female  0   0   3  20
> latex(x2,
+       title="",
+       rowname="",
+       rgroup=col1,
+       cgroup=c("", "Child", "Adult"),
+       n.cgroup=c(1, 2, 2),
+       n.rgroup=rep(2, 4)
+       )


HTH.

Dave


Fredrik Karlsson wrote:
> Dear list, 
> 
> I cannot make the latex command to output a ftable objet the way I
> want it. Is it posible?
> I found a post in the archives saying that one should use the rgroup
> and n.rgroup arguments to supply the row names, but so far I have been
> unsuccessful.
> 
> This is what I have:
> 
> 
>>(ftable(tapply(worksub$vot,list(votcat=worksub$votcat,age=worksub$agemF,voicetype=worksub$Type),FUN="distribution.table.fun",digits=4)) -> ftab)
> 
>                   voicetype                  Voiced   Voiceless
> unaspirated     Voiceless aspirated
> votcat    age
> Prevoiced 18 - 24           46.6158 (0;-1.6652)     40.7417
> (0;-0.6489)     48.4164 (0;-1.0483)
>           24 - 30           50.5716 (0;-1.4244)**   43.4056
> (-1;-0.4537)*** 24.204 (0;-2.1416)
>           30 - 36           44.4439 (0;-1.182)*     51.0996
> (0;-1.5241)***  32.1219 (0;-1.5007)
>           36 - 42           40.8604 (-1;-0.3423)    40.6045
> (-1;-0.408)**   32.7949 (0;-2.75)
>           42 - 48           46.301 (0;-1.1878)      21.6894
> (0;-1.7041)     NA (NA;NA)
>           48 - 54           38.0151 (-1;-0.7878)*   27.6954
> (-1;0.0396)*    NA (NA;NA)
> Short lag 18 - 24           7.5719 (1;0.4391)***    9.7039
> (1;-0.2938)***   8.5525 (1;-0.4063)***
>           24 - 30           8.3466 (1;-0.3122)***   9.8524
> (0;-0.887)***    11.4154 (0;-1.2267)***
>           30 - 36           9.4509 (1;-0.0795)***   9.0177
> (1;-0.2654)***   9.441 (0;-0.7625)
>           36 - 42           9.4921 (1;-0.1835)***   10.107 (0;-0.72)**
>      10.912 (0;-1.3619)
>           42 - 48           7.8254 (1;1.016)**      9.5687 (0;-0.9019)
>      10.6842 (-1;0.0719)*
>           48 - 54           7.7332 (1;1.2834)**     9.4626
> (1;0.3173)***    10.0508 (0;-1.4876)
> Long lag  18 - 24           16.7312 (0;-1.7286)     21.4786
> (2;2.4726)**    41.6646 (1;-0.6796)***
>           24 - 30           29.5637 (1;-0.0951)**   37.4517
> (1;0.1032)***   38.2729 (1;-0.3249)***
>           30 - 36           23.0214 (0;-1.3023)     35.0403
> (1;0.9176)***   36.0989 (1;-0.2141)***
>           36 - 42           10.579 (1;0.3292)       31.4878
> (0;-1.2475)     38.0472 (1;-0.3049)**
>           42 - 48           17.9077 (1;-1.2857)     26.8651
> (1;0.0221)***   30.5705 (1;-0.5866)***
>           48 - 54           18.832 (0;-2.3333)      40.375 (1;-1.417)*
>      26.2463 (1;0.4025)***
> 
>>latex(ftab,cgroup=attributes(ftab)$col.vars$voicetype, rgroup=attributes(ftab)$row.vars$votcat, n.rgroup=c(6,6,6),file="")
> 
> % latex.default(ftab, cgroup = attributes(ftab)$col.vars$voicetype,   
>   rgroup = attributes(ftab)$row.vars$votcat, n.rgroup = c(6,         
> 6, 6), file = "")
> %
> \begin{table}[!tbp]
>  \begin{center}
>  \begin{tabular}{lclcl}\hline\hline
> \multicolumn{1}{c}{\bfseries Voiced}&
> \multicolumn{1}{c}{\bfseries }&
> \multicolumn{1}{c}{\bfseries Voiceless unaspirated}&
> \multicolumn{1}{c}{\bfseries }&
> \multicolumn{1}{c}{\bfseries Voiceless aspirated}
> \\ \cline{1-5}
> \multicolumn{1}{c}{}&
> \multicolumn{1}{c}{}&
> \multicolumn{1}{c}{}&
> \multicolumn{1}{c}{}&
> \multicolumn{1}{c}{}
> \\ \hline
> &&&&\\
> 46.6158 (0;-1.6652)&&40.7417 (0;-0.6489)&&48.4164 (0;-1.0483)\\
> 50.5716 (0;-1.4244)**&&43.4056 (-1;-0.4537)***&&24.204 (0;-2.1416)\\
> 44.4439 (0;-1.182)*&&51.0996 (0;-1.5241)***&&32.1219 (0;-1.5007)\\
> 40.8604 (-1;-0.3423)&&40.6045 (-1;-0.408)**&&32.7949 (0;-2.75)\\
> 46.301 (0;-1.1878)&&21.6894 (0;-1.7041)&&NA (NA;NA)\\
> 38.0151 (-1;-0.7878)*&&27.6954 (-1;0.0396)*&&NA (NA;NA)\\
> \hline
> &&&&\\
> 7.5719 (1;0.4391)***&&9.7039 (1;-0.2938)***&&8.5525 (1;-0.4063)***\\
> 8.3466 (1;-0.3122)***&&9.8524 (0;-0.887)***&&11.4154 (0;-1.2267)***\\
> 9.4509 (1;-0.0795)***&&9.0177 (1;-0.2654)***&&9.441 (0;-0.7625)\\
> 9.4921 (1;-0.1835)***&&10.107 (0;-0.72)**&&10.912 (0;-1.3619)\\
> 7.8254 (1;1.016)**&&9.5687 (0;-0.9019)&&10.6842 (-1;0.0719)*\\
> 7.7332 (1;1.2834)**&&9.4626 (1;0.3173)***&&10.0508 (0;-1.4876)\\
> \hline
> &&&&\\
> 16.7312 (0;-1.7286)&&21.4786 (2;2.4726)**&&41.6646 (1;-0.6796)***\\
> 29.5637 (1;-0.0951)**&&37.4517 (1;0.1032)***&&38.2729 (1;-0.3249)***\\
> 23.0214 (0;-1.3023)&&35.0403 (1;0.9176)***&&36.0989 (1;-0.2141)***\\
> 10.579 (1;0.3292)&&31.4878 (0;-1.2475)&&38.0472 (1;-0.3049)**\\
> 17.9077 (1;-1.2857)&&26.8651 (1;0.0221)***&&30.5705 (1;-0.5866)***\\
> 18.832 (0;-2.3333)&&40.375 (1;-1.417)*&&26.2463 (1;0.4025)***\\
> \hline
> \end{tabular}
> 
> \end{center}
> 
> \end{table}
> 
> 
> 
> As you can see, I do not get any row names, and I want two layers of
> them (votcat and age in the formula). Column names work ok.
> 
> Please, help me recreate the table above in latex form (if it is
> indeed possible).
> 
> /Fredrik
> 
> ______________________________________________
> R-help at stat.math.ethz.ch mailing list
> https://stat.ethz.ch/mailman/listinfo/r-help
> PLEASE do read the posting guide! http://www.R-project.org/posting-guide.html
> 

-- 
David Whiting
School of Clinical Medical Sciences, The Medical School
University of Newcastle upon Tyne, NE2 4HH, UK.

"I love deadlines. I love the whooshing noise they make as they go by"
(Douglas Adams)




More information about the R-help mailing list