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
+ 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