0

我必须生成带有很长表格的数据列表,这些表格必须显示在多个页面上,并且我想折叠一些行(例如:ID)。

我正在使用该包kable来生成表格和collapse_row折叠我的 ID 行的函数。

当我编织到 pdf 时,与折叠行的列中的对齐完全搞砸了,我什至让 ID 出现在表格之外或出现在重复的标题中......

这是我的代码:

kable(data, "latex", booktabs = T,longtable = T, linesep = "", row.names = FALSE) %>%
kable_styling(full_width = T,
              position = "center",
              latex_options = c("striped", "repeat_header","hold_position"),
              font_size = 6,5)%>%
  column_spec(c(1),  color = "black", width = "5em")%>%
  column_spec(c(2), color = "black", width = "30em")%>%
  collapse_rows(1, latex_hline = "custom",valign = "top")%>%
  row_spec(0, bold = T, color = "black")

这是我的pdf输出的一部分:

<一个href= 线条放置得很好,但 ID 移到了顶部。

我怎样才能解决这个问题 ?谢谢。

4

1 回答 1

1

看起来像表格中垂直对齐的 LaTeX 问题。

github上问题的引用:

[...]似乎 booktabs 的 cmidrule 搞砸了多行的计算..

[...] 我不知道我是否能找到一个好的解决方案。我当然可以删除那些中线。我也不喜欢它们,但它们对于具有多个标题列的表很重要。如果我们保留这些中线,TeX 人说您可以手动添加调整到多行。我当然可以通过代码模拟它,但它似乎会在未来给我带来更多问题。

来源:https ://github.com/haozhu233/kableExtra/issues/56

附加参考:

当我遇到同样的问题时,这个解决方案在我的情况下效果很好。该解决方案基于在输出到 kable 之前操作 data.frame,而不是使用 collapse_rows 更改 kable 输出。最初的贡献者 ( Michael Harper ) 开发它是为了与 formattable 包一起使用,但它可以很容易地针对 kable 包进行调整。

你需要声明这个函数:

collapse_rows_df <- function(df, variable){

group_var <- enquo(variable)

  df %>%
    group_by(!! group_var) %>%
    mutate(groupRow = 1:n()) %>%
    ungroup() %>%
    mutate(!!quo_name(group_var) := ifelse(groupRow == 1, as.character(!! group_var), "")) %>%
    select(-c(groupRow))
}

该函数会删除指定列中除首次遇到的数据之外的所有数据,而是留下空格。

您需要在将数据发送到 kable 之前调用该函数。请参见下面的示例:

library(knitr) # required for kable()

# dfToKable - your data.frame you need to kable
# columnToCollapseRows - the name of the column, in which you want to collapse the rows; 
#   it should be a valid variable within the data.frame set and be passed without quotes

kable( collapse_rows_df( dfToKable, columnToCollapseRows ),
      row.names = F, escape = F, longtable = TRUE) %>% 
      kable_styling(full_width = T, latex_options = c("repeat_header"))

根据您提供的代码和屏幕截图,这应该适合您:

kable( collapse_rows_df( data, SubID) "latex", booktabs = T,longtable = T, linesep = "", row.names = FALSE) %>%
kable_styling(full_width = T,
              position = "center",
              latex_options = c("striped", "repeat_header","hold_position"),
              font_size = 6,5)%>%
  column_spec(c(1),  color = "black", width = "5em")%>%
  column_spec(c(2), color = "black", width = "30em")%>%
  row_spec(0, bold = T, color = "black")
于 2019-05-15T17:23:46.530 回答