Re: [R] Convert ftable to latex?

From: David Whiting <david.whiting_at_ncl.ac.uk>
Date: Tue 30 Aug 2005 - 23:15:51 EST

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@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)

______________________________________________
R-help@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
Received on Tue Aug 30 23:21:24 2005

This archive was generated by hypermail 2.1.8 : Sun 23 Oct 2005 - 16:08:35 EST