简体   繁体   English

使用xtable在latex中输出带子表的表

[英]Output a table with subtables in latex with xtable

I want to create a latex table with many different subtables. 我想创建一个包含许多不同子表的乳胶表。 I basically want to generate a table with the answers from a survey. 我基本上想要生成一个包含调查答案的表格。

For example the table for the first question is: 例如,第一个问题的表是:

Q1 <- structure(c(6L, 14L, 20L, 15L, 2L, 3L, 12L, 25L, 7L, 1L, 2L, 
13L, 35L, 10L, 3L), .Dim = c(5L, 3L), .Dimnames = structure(list(
    c("none", "very little", "some", "most", "all"), c("control", 
    "treatment1", "treatment2")), .Names = c("", "")), class = "table")

The table for the second question is: 第二个问题的表是:

Q2 <- structure(c(39L, 12L, 4L, 1L, 1L, 31L, 13L, 4L, 0L, 0L, 39L, 
20L, 4L, 0L, 0L), .Dim = c(5L, 3L), .Dimnames = structure(list(
    c("A", "B+", "B", "B-", "C"), c("control", "treatment1", 
    "treatment2")), .Names = c("", "")), class = "table")

I want my LaTeX output to look something like: 我希望我的LaTeX输出看起来像:

                    Some Title
                    Question 1
             control treatment1 treatment2
  none              6          3          2
  very little      14         12         13
  some             20         25         35
  most             15          7         10
  all               2          1          3
                    Question 2
  A                39         31         39
  B+               12         13         20
  B                 4          4          4
  B-                1          0          0
  C                 1          0          0

I can create individual tables with X table but that requires some manual work in latex to merge them. 我可以用X表创建单独的表,但这需要在latex中进行一些手动工作来合并它们。 Right now I do: 现在我做:

print(xtable(Q1), floating = FALSE, only.contents = FALSE, 
      include.rownames = TRUE, include.colnames = TRUE, hline.before = c(1))

Although this method is a bit of a workaround, it gets close to what you are looking for. 虽然这种方法有点变通方法,但它接近您所寻找的方法。 In order to get a workable structure, I needed to expand your tables with expand.table from the epitools package and use the tabular function from tables package to get a useable format. 为了得到一个可行的结构,我需要与扩大你的表expand.table从epitools包,并使用tabular功能从表包以获得可用的格式。 This is may not be the best or most efficient way but if you are trying to avoid some later latex processing this could help. 这可能不是最好或最有效的方法,但如果你试图避免一些后来的乳胶加工,这可能会有所帮助。 After filtering and converting to a matrix you can use xtable to produce the following table: 过滤并转换为矩阵后,您可以使用xtable生成下表:

在此输入图像描述

R code R代码

require(xtable)
require(epitools)
require(tables)

Q1 <- structure(c(6L, 14L, 20L, 15L, 2L, 3L, 12L, 25L, 7L, 1L, 2L, 
                  13L, 35L, 10L, 3L), .Dim = c(5L, 3L), .Dimnames = structure(list(
                    c("none", "very little", "some", "most", "all"), c("control", 
                                                                       "treatment1", "treatment2")), .Names = c("", "")), class = "table")

Q2 <- structure(c(39L, 12L, 4L, 1L, 1L, 31L, 13L, 4L, 0L, 0L, 39L, 
                  20L, 4L, 0L, 0L), .Dim = c(5L, 3L), .Dimnames = structure(list(
                    c("A", "B+", "B", "B-", "C"), c("control", "treatment1", 
                                                    "treatment2")), .Names = c("", "")), class = "table")


names(dimnames(Q1)) <- c("Responses", "Conditions")
names(dimnames(Q2)) <- c("Responses", "Conditions")
q1_df <- expand.table(Q1)
q1_df$Question <- "Question 1"
q2_df <- expand.table(Q2)
q2_df$Question <- "Question 2"
df <- rbind(q1_df, q2_df)


tab <- tabular((Factor(Question)*Factor(Responses)+1) ~ (Conditions), data=df)
tab <- tab[tab[,1] > 0,]
tab <- as.matrix(tab[1:nrow(tab) -1,])

print(xtable(tab, caption="Some Title"), include.rownames=F, include.colnames=F, latex.environments="center", comment=F, caption.placement='top', hline.after=c(0, nrow(tab)))

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM