2010-04-21 9 views
16

Ho un dataframe che sto inserendo in un documento sweave usando xtable, tuttavia uno dei nomi delle mie colonne è piuttosto lungo, e vorrei romperlo due linee per risparmiare spazioCome inserire una nuova riga in un'intestazione di colonna in un xtable in 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) 

ho provato a mettere una nuova riga nel nome, ma questo non sembra funzionare

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

c'è un modo per fare questo? Ho visto qualcuno suggerire di usare la funzione latex dal pacchetto hmisc per iterare manualmente sul tavolo e scriverlo manualmente in latex, incluso il newline, ma questo sembra un po 'falso!

+0

Questa è una domanda perfettamente valida e si applica a molte situazioni, ma in questo caso specifico potrei esplorare modi per ridurre la parola: forse "Identificatore di corsa" invece di "Identificatore della corsa" all'interno dello studio "? – Sharpie

+0

Hai ragione, ho evocato un breve esempio e il mio lungo titolo è un po 'più prolisso del solito ... – PaulHurleyuk

risposta

24

Il modo migliore che ho trovato per fare questo è indicare la colonna della tabella come una colonna "larghezza fissa" in modo che il testo al suo interno si avvolga. Con il pacchetto xtable, questo può essere fatto con:

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

xtable esigenze che si forniscono un allineamento per l'opzione "rownames" colonna- questa è la specifica iniziale l. La specifica della sezione, p{1.5in}, viene utilizzata per l'intestazione della prima colonna, che è piuttosto lunga. Questo lo limita a una casella di 1,5 pollici di larghezza e l'intestazione si avvolgerà su più righe se necessario. Le restanti cinque colonne sono centrate usando l'identificatore c.

Uno dei problemi principali con colonne a larghezza fissa come p{1.5in} è che impostano il testo utilizzando un allineamento giustificato. Ciò fa sì che la spaziatura tra parole in ogni riga venga espansa in modo tale che la linea riempirà l'intero 1,5 pollici assegnato.

Francamente, nella maggior parte dei casi questo produce risultati che non posso descrivere usando un linguaggio educato (sono un matto tipografico amatoriale e questo tipo di comportamento causa zecche facciali).

La correzione è quello di fornire un comando di allineamento lattice anteponendo un campo >{} alla specifica colonna:

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

Altri comandi utili allineamento sono:

  • \ raggedright -> fa sì che il testo ad essere allineato a sinistra
  • \ raggedleft -> fa sì che il testo sia allineato a destra

Ricordarsi di raddoppiare i backslash per evitarli nelle stringhe R. Potrebbe inoltre essere necessario disabilitare la funzione di risanamento delle stringhe utilizzata da xtable per impostazione predefinita.

Nota

Questo allineamento tecnica fallirà se utilizzato sull'ultima colonna di una tabella meno che righe della tabella sono concluse con \tabularnewline invece di \\, che credo non sia il caso di xtable e non è facilmente personalizzabile tramite un'opzione impostabile dall'utente.

L'altra cosa da considerare è che non si può desiderare che l'intera colonna sia allineata a 1,5 pollici e centrata, solo l'intestazione. In tal caso, disabilitare xtable stringa di sanificazione e impostare l'intestazione utilizzando una cella \multicolumn di larghezza di 1:

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

C'è un modo per specificare la larghezza massima per una colonna? Qualcosa come p {<= 1.5in}? – dariaa

+0

Questo potrebbe essere ciò che devi fare, ma è atroce. – dfrankow

2

tecnica s' @Sharpie non ha funzionato per me, come Pandoc riuscita con errore 43 sulla conversione in PDF. Pertanto, ecco quello che ho fatto:

spostato il \\centering marcatore:

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

(qui applicato a tutte le 6 colonne della tabella)

e sanificazione disabile nella stampa XTABLE:

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