PDF Rmarkdown — неправильное выравнивание в многострочных ячейках

#pdf #alignment #r-markdown #knitr #kable

#PDF #выравнивание #r-markdown #knitr #kable

Вопрос:

По какой-то причине следующий код генерирует таблицу, в которой последний столбец чередует выравнивание (слева, справа, по центру, слева, …). Я пытался использовать \ в качестве разделителя строк вместо n, но это только создавало неудобное и большое пространство между каждым элементом. Я бы предпочел, чтобы весь этот последний столбец был центрирован — у кого-нибудь есть идеи о том, почему это происходит?

 library(knitr)
library(kableExtra)
df <- data.frame(Metric = c("ECG (mV)", "EDA ($\mu$s)","EMG (mV)", "Temp (C$^\circ$)","Resp ($\%$)", 
                            "BVP", "EDA ($\mu$s)", "Temp (C$^\circ$)"), 
                 Description = linebreak(c("Electrocardiography", "Electrodermal Activity", "Electromyography", "Body Temperature", "Respiration",
                                           "Blood Volume Pulse", "Electrodermal Activity", "Skin Temperature")), 
                 Features = linebreak(c("Mean n Std Deviation n Peaks", "Mean n Std Deviation", "Mean n Std Deviation", 
                                        "Mean n Std Deviation", "Mean n Std Deviation n Peaks", 
                                        "Mean n Std Deviation n Heart Rate Variability", "Mean n Std Deviation", 
                                        "Mean n Std Deviation")))
kable(df, format = "latex", escape = F, align="c") %>%
  group_rows(index = c("RespiBAN Chest Sensor" = 5, "Empatica E4 Wrist Sensor" = 3)) %>%
  kable_styling(bootstrap_options = c("hover"))

  

вывод таблицы

Ответ №1:

Добавление align="c" в linebreak должно работать

 library(knitr)
library(kableExtra)
df <- data.frame(Metric = c("ECG (mV)", "EDA ($\mu$s)","EMG (mV)", "Temp (C$^\circ$)","Resp ($\%$)", 
                            "BVP", "EDA ($\mu$s)", "Temp (C$^\circ$)"), 
                 Description = linebreak(c("Electrocardiography", "Electrodermal Activity", "Electromyography", "Body Temperature", "Respiration",
                                           "Blood Volume Pulse", "Electrodermal Activity", "Skin Temperature")), 
                 Features = linebreak(c("Mean n Std Deviation n Peaks", "Mean n Std Deviation", "Mean n Std Deviation", 
                                        "Mean n Std Deviation", "Mean n Std Deviation n Peaks", 
                                        "Mean n Std Deviation n Heart Rate Variability", "Mean n Std Deviation", 
                                        "Mean n Std Deviation"), align = "c")) #This parameter
  

Ответ №2:

 collapse_rows_dt <- data.frame(Metric = c(rep("ECG (mV)", 3), rep("EDA ($\mu$s)", 2), rep("EMG (mV)", 2), rep("Temp (C$^\circ$)", 2),
                                      rep("Resp ($\%$)", 3), rep("BVP", 3), rep("EDA ($\mu$s)", 2), rep("Temp (C$^\circ$)", 2)),
                               Description = linebreak(c(rep("Electrocardiography", 3), 
                                                         rep("Electrodermal Activity", 2), 
                                                         rep("Electromyography", 2),
                                                         rep("Body Temperature", 2), 
                                                         rep("Respiration", 3), 
                                                         rep("Blood Volume Pulse", 3), 
                                                         rep("Electrodermal Activity", 2), 
                                                         rep("Skin Temperature", 2))),
                               Features = linebreak(c("Mean", "Std Deviation", "Peaks", 
                                        "Mean" , "Std Deviation", 
                                        "Mean", "Std Deviation", 
                                        "Mean", "Std Deviation", 
                                        "Mean",  "Std Deviation", "Peaks", 
                                        "Mean", "Std Deviation", "Heart Rate Variability", 
                                        "Mean", "Std Deviation", 
                                        "Mean", "Std Deviation")))
kable(collapse_rows_dt, escape=F, booktabs = T, align = "llc") %>%
  group_rows(index = c("RespiBAN Chest Sensor" = 12, "Empatica E4 Wrist Sensor" = 7)) %>%
  column_spec(1, bold=T) %>%
  collapse_rows(columns = 1:2, latex_hline = "major", valign = "middle")
  

Определенно не идеальное решение, но оно справилось с задачей

таблица по центру