Jak umieścić nowy wiersz w nagłówku kolumny w tabeli xtable w R

Mam ramkę danych, którą umieszczam w sweave za pomocą xtable, jednak jedna z moich kolumn jest dość długa i chciałbym ją podzielić na dwie linie, aby zaoszczędzić miejsce

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)

Próbowałem wstawić nowy wiersz do nazwy, ale to chyba nie działa

names(calqc_table)[1]<-"Identifier of the \nRun within the Study"
Jest na to jakiś sposób ? Widziałem, że ktoś zasugerował użycie funkcji latex z pakietu hmisc , Aby ręcznie iterować nad tabelą i wypisać ją ręcznie w latexie, w tym newline, ale to wydaje się być trochę faf !
Author: Sharpie, 2010-04-22

2 answers

Najlepszym sposobem, jaki znalazłem, jest wskazanie kolumny tabeli jako kolumny o stałej szerokości, aby tekst w niej zawijał się. Z pakietem xtable można to zrobić za pomocą:

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

xtable wymaga podania wyrównania dla kolumny opcji "rownames" - jest to początkowa Specyfikacja l. Specyfikacja sekcji, p{1.5in}, jest używana do nagłówka pierwszej kolumny, który jest dość długi. Ogranicza to do pola o szerokości 1,5 cala, a nagłówek zawija się na w razie potrzeby wiele linii. Pozostałe pięć kolumn ustawia się na środku za pomocą specyfikacji c.

Jednym z głównych problemów z kolumnami o stałej szerokości, takimi jak p{1.5in} jest to, że ustawiają tekst za pomocą justowanego wyrównania . Powoduje to, że odstępy między wyrazami w każdej linii są rozszerzane w taki sposób, że linia wypełni całe przydzielone 1,5 cala.

Szczerze mówiąc, w większości przypadków daje to wyniki, których nie potrafię opisać grzecznym językiem (jestem amatorem typografii i Takie zachowanie powoduje kleszcze twarzy).

Poprawką jest dostarczenie polecenia wyrównania lateksu poprzez dodanie pola >{} do specyfikacji kolumny:

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

Inne przydatne polecenia wyrównania to:

  • \raggedright - > powoduje, że tekst będzie wyrównany do lewej
  • \raggedleft - > powoduje, że tekst będzie wyrównany do prawej

Pamiętaj, aby podwoić ukośniki, aby uniknąć ich w łańcuchach R. Może być również konieczne wyłączenie ciągu znaków funkcja sanitarna, która xtable używa domyślnie.

Uwaga

Ta technika wyrównywania nie powiedzie się, jeśli zostanie użyta w ostatniej kolumnie tabeli , chyba że wiersze tabeli są zakończone \tabularnewline zamiast \\, co moim zdaniem nie jest w przypadku xtable i nie jest łatwo konfigurowalne za pomocą żadnej opcji ustawialnej przez użytkownika.

Inną rzeczą do rozważenia jest to, że możesz nie chcieć całej linii kolumny-owiniętej do 1,5 cala i wyśrodkowanej-tylko nagłówka. W w tym przypadku wyłącz xtable dezynfekcję ciągu i ustaw nagłówek używając komórki \multicolumn o szerokości 1:

names(calqc_table)[1]<-"\\multicolumn{1}{>{\\centering}p{1.5in}}{Identifier of the Run within the Study}"
 25
Author: Sharpie,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-04-23 16:02:01

@Sharpie 's technika nie działa dla mnie, jak pandoc zawiódł z błędem 43 przy konwersji do pdf. Dlatego oto, co zrobiłem:

Przesunięto znacznik \\centering:

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

(tutaj zastosowano do wszystkich 6 kolumn tabeli)

I wyłączona sanityzacja w druku xtable:

print(calqc_table, sanitize.colnames.function=function(x){x})
 2
Author: Raoul,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-05-26 23:22:23