[R] Convert ftable to latex?

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


Hi again Fredrik,

Here's a slightly better version (sex is no longer the first column, it
is used by the rowname option in latex instead).

> 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(x[ ,])
> colnames(x2) <- c("No", "Yes", "No", "Yes")
>
> x2
  No Yes  No Yes
1  0   5 118  57
2  0   1   4 140
3  0  11 154  14
4  0  13  13  80
5 35  13 387  75
6 17  14  89  76
7  0   0 670 192
8  0   0   3  20
>
> latex(x2,
+       title="",
+       rowname=col2,
+       rgroup=col1,
+       cgroup=c("Child", "Adult"),
+       n.cgroup=c(2, 2),
+       n.rgroup=rep(2, 4)
+       )


Dave

David Whiting wrote:
> 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