2010-04-21 2 views
16

У меня есть кадр данных, который я помещаю в документ с использованием xtable, однако одно из моих имен столбцов довольно длинное, и я хотел бы его разбить две линии, чтобы сохранить пространствоКак поместить символ новой строки в заголовок столбца в xxtable в R

calqc_table<-structure(list(RUNID = c(1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 
1L, 1L), ANALYTEINDEX = c(1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 
1L, 1L), ID = structure(1:11, .Label = c("Cal A", "Cal B", "Cal C", 
"Cal D", "Cal E", "Cal F", "Cal G", "Cal H", "Cal High", "Cal Low", 
"Cal Mid"), class = "factor"), mean_conc = c(200.619459644855, 
158.264703128903, 102.469121407733, 50.3551544728544, 9.88296440865076, 
4.41727762501703, 2.53494715706024, 1.00602831741361, 199.065054555735, 
2.48063347296935, 50.1499780776199), sd_conc = c(2.3275711264554, 
NA, NA, NA, NA, NA, NA, 0.101636943231162, 0, 0, 0), nrow = c(3, 
1, 1, 1, 1, 1, 1, 3, 2, 2, 2)), .Names = c("Identifier of the Run within the Study", "ANALYTEINDEX", 
"ID", "mean_conc", "sd_conc", "nrow"), row.names = c(NA, -11L 
), class = "data.frame") 
calqc_xtable<-xtable(calqc_table) 

Я попытался положить строку в имени, но это, похоже, не работает

names(calqc_table)[1]<-"Identifier of the \nRun within the Study" 

есть ли способ сделать это? Я видел, как кто-то предлагает использовать функцию латекса из пакета hmisc, чтобы вручную перебирать таблицу и записывать ее в латекс вручную, включая новую строку, но это похоже на faf!

+0

Это совершенно правильный вопрос и относится ко многим ситуациям, но в этом конкретном случае я мог бы изучить способы сокращения словесности - возможно, «Идентификатор запуска» вместо «Идентификатор прогона» в рамках исследования "? – Sharpie

+0

Вы правы, я придумал короткий пример, и мой длинный заголовок немного более многословный, чем мой обычный. – PaulHurleyuk

ответ

24

Лучший способ, который я нашел для этого, - указать столбец таблицы как столбец «фиксированной ширины», чтобы текст внутри него обертывался. С xtable пакетом, это может быть сделано с:

align(calqc_xtable) <- c('l', 'p{1.5in}', rep('c',5)) 

xtable требует, чтобы вы обеспечиваете выравнивание для опции «rownames» столбцами это начальная l спецификации. Спецификация раздела, p{1.5in}, используется для вашего первого заголовка столбца, который довольно длинный. Это ограничивает его шириной в 1,5 дюйма и заголовок наматывается на несколько строк, если это необходимо. Остальные пять столбцов центрируются с использованием спецификатора c.

Одна из основных проблем с столбцами с фиксированной шириной, такими как p{1.5in}, заключается в том, что они устанавливают текст с использованием выравнивания выравнивания. Это приводит к расширению интервала между словами в каждой строке, чтобы линия заполнила все выделенные 1,5 дюйма.

Откровенно говоря, в большинстве случаев это приводит к результатам, которые я не могу описать с использованием вежливого языка (я - любительский типографский орех, и такое поведение вызывает лицевые клещи).

Исправление заключается в создании команды выравнивания латекса, предваряя >{} поле в спецификации столбца:

align(calqc_xtable) <- c('l', '>{\\centering}p{1.5in}', rep('c',4)) 

Другие команды полезны при выравнивании:

  • \ RaggedRight -> вызывает текст, который будет левый выровненный
  • \ raggedleft -> вызывает текст Выравнивание вправо

Не забывайте удвоить обратную косую черту, чтобы избежать их в R-строках. Вам также может потребоваться отключить функцию очистки строки, которую по умолчанию использует xtable.

Примечание

Это выравнивание метод потерпит неудачу, если используется на последнем столбце таблицы , если только таблица строк закончилась \tabularnewline вместо \\, который я думаю, это не тот случай с xtable и легко настраивается с помощью любого настраиваемого пользователем варианта.

Другая вещь, которую следует учитывать, состоит в том, что вам может не потребоваться, чтобы весь столбец был обернут на 1,5 дюйма и центрирован - только заголовок. В этом случае отключите xtable строку санитарную и установить заголовок, используя \multicolumn ячейку шириной 1:

names(calqc_table)[1]<-"\\multicolumn{1}{>{\\centering}p{1.5in}}{Identifier of the Run within the Study}" 
+0

Есть ли способ указать максимальную ширину для столбца? Что-то вроде p {<= 1.5in}? – dariaa

+0

Это может быть то, что вам нужно сделать, но это отвратительно. – dfrankow

2

техника @Sharpie «s не работает для меня, как pandoc неудачу с ошибкой 43 при преобразовании в формат PDF. Поэтому, вот что я сделал:

переместил \\centering маркер:

names(calqc_table)=c(rep("\\multicolumn{1}{p{0.75in}}{\\centering Identifier of the Run within the Study}", 6)) 

(здесь применяется ко всем 6 столбцов таблицы)

и инвалидов санитарной обработки в xtable печати:

print(calqc_table, sanitize.colnames.function=function(x){x})