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

3
我希望您能够创建一个包含许多不同子表的 LaTeX 表格。我基本上想要生成一张包含调查答案的表格。
例如,第一个问题的表格如下:
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")

我希望我的LaTeX输出看起来像这样:

我希望我的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

我可以使用X表格创建单独的表格,但这需要在Latex中进行一些手动工作才能合并它们。目前我的操作是:

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

我会使用rbind将表格合并成一个表,并在print(xtable())命令中使用add.to.row功能来包含中间标题(请参见此帖子以了解如何使用它)。为了居中显示中间标题,我建议使用multirow包的功能。上述提到的帖子中有一条评论解释了如何应用它。 - jmjr
1个回答

0

虽然这种方法有点绕,但它接近于您要寻找的内容。为了获得可用的结构,我需要使用 epitools 包中的 expand.table 扩展您的表格,并使用 tables 包中的 tabular 函数来获取可用格式。这可能不是最好或最有效的方法,但如果您想避免一些后期的 LaTeX 处理,这可能会有所帮助。在过滤和转换为矩阵后,您可以使用 xtable 生成以下表格:

enter image description here

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接