Как исправить проблемы выравнивания / отображения длинной таблицы в документе PDF при использовании collapse_row и kable? - PullRequest
0 голосов
/ 18 апреля 2019

Я должен создать списки данных с довольно длинными таблицами, которые должны отображаться на нескольких страницах, и я хочу свернуть несколько строк (например, ID).

Я использую пакет kable для создания таблиц и функцию collapse_row для свертывания моих строк идентификаторов.

Когда я вяжу в pdf, выравнивание в столбце ссвернутые строки полностью испорчены, и я даже получил идентификатор, появляющийся из таблицы или инкрустированный в повторном заголовке ...

Вот мой код:

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:

<a href=Screen-Shot-2019-04-18-at-13-05-57 "> Линии хорошо размещены, но идентификатор смещен наверх.

Как я могу это исправить? Спасибо.

1 Ответ

1 голос
/ 15 мая 2019

Похоже на проблему LaTeX с вертикальным выравниванием в таблицах.

Цитата из номера на github:

[...] похоже на то, что командная книга в буксах испортила расчет многолинейности ..

[...] Я не знаю, смогу ли я найти хорошее решение для этого. Я, конечно, могу удалить эти средние линии. Мне они тоже не нравятся, но они важны для таблиц с несколькими столбцами заголовков. Если мы сохраним эти средние линии, люди из TeX говорят, что вы можете вручную добавить корректировки к многоряду. Я, конечно, могу смоделировать это с помощью кода, но, похоже, это принесет мне больше проблем в будущем.

Источник: https://github.com/haozhu233/kableExtra/issues/56

Дополнительные ссылки:

Это решение хорошо работало в моем случае, когда у меня была такая же проблема. Решение основано на манипулировании data.frame перед выводом в kable, а не изменении вывода kable с помощью collapse_rows. Оригинальный участник ( Michael Harper ) разработал его для использования с форматируемым пакетом, но его можно легко настроить для пакета 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")
...