2015-10-19 13 views
7

Obecnie tworzenia obrazu przedstawionego za pomocą:Łączenie komórek tabeli nagłówka Korzystanie tableGrob

SummaryTable <- data.frame(
    index, 

    xa, 
    xb, 

    ya, 
    yb, 

    za, 
    zb 

) 
names(SummaryTable) <- c("Index", 
         "Main X Sub A", 
         "Main X Sub B", 
         "Main Y Sub A", 
         "Main Y Sub B", 
         "Main Z Sub A", 
         "Main Z Sub B") 

tt <- ttheme_default(colhead=list(fg_params = list(parse=TRUE))) 
tbl <- tableGrob(SummaryTable, rows=NULL, theme=tt) 

grid.arrange(tbl,as.table=TRUE) 

Z wyjściem: enter image description here

Stosując dput (SummaryTable):

structure(list(Index = 0:8, `Main X Sub A` = c(1, 0.69, 0.61, 
0.56, 0.5, 0.44, 0.4, 0.36, 0.33), `Main X Sub B` = c(0.86, 0.62, 
0.51, 0.42, 0.36, 0.31, 0.27, 0.24, 0.23), `Main Y Sub A` = c(1, 
0.8, 0.74, 0.68, 0.63, 0.56, 0.52, 0.47, 0.43), `Main Y Sub B` = c(0.86, 
0.77, 0.67, 0.59, 0.53, 0.47, 0.43, 0.39, 0.36), `Main Z Sub A` = c(0, 
0.17, 0.23, 0.27, 0.33, 0.37, 0.42, 0.46, 0.49), `Main Z Sub B` = c(0, 
0.24, 0.33, 0.42, 0.48, 0.55, 0.6, 0.64, 0.66)), .Names = c("Index", 
"Main X Sub A", "Main X Sub B", "Main Y Sub A", "Main Y Sub B", 
"Main Z Sub A", "Main Z Sub B"), row.names = c(NA, -9L), class = "data.frame") 

jednak, że chciałby połączyć nagłówki górne, aby osiągnąć ten wynik (jako png lub pdf):

enter image description here

Ta tabela została utworzona w programie Excel. X, Y i Z są w scalonych komórkach.

Czy ktoś może pomóc w metodach łączenia komórek?

+0

Proszę 'dput (SummaryTable)'. PNG są bezużyteczne. – vaettchen

Odpowiedz

6

Jednym ze sposobów byłoby użyć combine zamiast join (described here), aby dodać dodatkowy wiersz nagłówka do stolika.

Za pomocą pomysłu z here można utworzyć tableGrob dla dodatkowego wiersza nagłówka.

Następnie można zmienić l i r z gtable, aby poprawić pozycjonowanie.

library(grid) 
library(gridExtra) 

# example data & header row 
tab <- tableGrob(mtcars[1:3, 1:4], rows=NULL) 
header <- tableGrob(mtcars[1, 1:2], rows=NULL, cols=c("head1", "head2")) 

jn <- combine(header[1,], tab, along=2) 
jn$widths <- rep(max(jn$widths), length(jn$widths)) # make column widths equal 
#grid.newpage() 
#grid.draw(jn) # see what it looks like before altering gtable 

# change the relevant rows of gtable 
jn$layout[1:4 , c("l", "r")] <- list(c(1, 3), c(2, 4)) 

grid.newpage() 
grid.draw(jn) 

enter image description here

+0

Dzięki @ user20650 Ja próbuje to na moim stole użyciu tego kodu: 'zakładka <- tableGrob (SummaryTable [1: 9, 2: 7], wiersze = NULL) nagłówka <- tableGrob (SummaryTable [1, 1: 3], wiersze = NULL, cols = c ("head1", "head2", "head3")) jn <- join (nagłówek [1,], tabulacja, wzdłuż = 2) jn $ widths <- rep (max (jn $ widths), length (jn $ widths)) jn $ layout [1: 7, c ("l", "r")] <- lista (c (1, 3), c (2 , 5), c (4, 7)) ' Oto mój wynik, z nie łączącymi się nagłówkami. http://i.imgur.com/89UNHt2.png –

+1

Prawie tam ... spróbuj 'jn $ layout [1: 6, c (" l "," r ")] <- list (c (1, 3, 5), c (2, 4, 6)) ". Warto spojrzeć na 'jn $ layout [1: 6,]' przed zmianami i po zmianach, aby przekonać się, że mają one sens) Używa się wektorowego recyklingu, tak że kolumna 'l'eft to' 1,3,5,1, 3,5' i 'r'ight' 2,4,6,2,4,6' – user20650

+0

@ScottHorvath, powinieneś zaakceptować tę odpowiedź –

Powiązane problemy