看起来像表格中垂直对齐的 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")