2013-03-14 10 views
17

Mam ramkę danych i chcę ją wypisać w pliku HTML przez knitr i RMarkdown jako tabelę z formatowaniem warunkowym. Przykład:Tworzenie tabel z formatowaniem warunkowym z RMarkdown + knitr

n <- data.frame(x = c(1,1,1,1,1), y = c(0,1,0,1,0)) 
> n 
    x y 
1 1 0 
2 1 1 
3 1 0 
4 1 1 
5 1 0 

Chcę, aby wiersze o różnych wartościach x i y były podświetlone. Tak więc w tym przypadku byłyby to wiersze 1, 3 i 5. Byłoby miło, gdyby dane wyjściowe w pliku HTML były tabelą HTML, ale w przeciwnym razie obraz również byłby w porządku.

+0

http://stackoverflow.com/questions/25315309/conditional-formatting-tables-in-rmarkdown-documents sugeruje pakiet ReportRs, FlexTable – rescdsk

Odpowiedz

22

Zawsze chciałem przedłużyć pandoc.table w moim pander package z tą funkcją, ale nie udało mi się uzyskać na to czasu. Ale to pytanie jest naprawdę inspirujące, prawdopodobnie zrobi to w ciągu najbliższych kilku dni. Do tego czasu, co:

  1. obciążeniu pakietu:

    library(pander) 
    
  2. Załaduj swoje dane:

    n <- data.frame(x = c(1,1,1,1,1), y = c(0,1,0,1,0)) 
    
  3. zaktualizować swoje linie mają być oznaczone jako silnym w Pandoc:

    for (i in c(1, 3, 5)) 
        n[i, ] <- pandoc.strong.return(n[1, ]) 
    
  4. Pokaż wersję markdown z tabeli:

    pandoc.table(n) 
    pander(n)  # S3 method 
    
  5. Covert Przecena na przykład HTML z brew składnią:

    Pandoc.brew(text = '<%=n%>', output = tempfile(), convert = 'html') 
    

Aktualizacja: I zostały zaktualizowane pander wziąć jakieś nowe argumenty łatwo wyróżnić wiersze/kolumny/komórki. Chociaż ja wciąż działa na niektórych dalszych funkcji pomocniczych, aby ułatwić ten proces, tu idzie szybki demo, dzięki czemu można zobaczyć, jak to może pomóc w obieg:

> pandoc.table(n, emphasize.rows = c(1, 3, 5)) 

------- 
x y 
--- --- 
*1* *0* 

1 1 

*0* *1* 

1 1 

*1* *0* 
------- 

> pandoc.table(n, emphasize.strong.cells = which(n == 1, arr.ind = TRUE)) 

----------- 
    x  y 
----- ----- 
**1** 0 

**1** **1** 

**1** 0 

**1** **1** 

**1** 0 
----------- 

Aktualizacja:pander otrzymałem funkcje pomocnicze, aby podświetlić komórek w tabelach jeszcze prościej

> t <- mtcars[1:3, 1:5] 
> emphasize.cols(1) 
> emphasize.rows(1) 
> pandoc.table(t) 

---------------------------------------------------- 
     &nbsp;   mpg cyl disp hp drat 
------------------- ------ ----- ------ ----- ------ 
    **Mazda RX4**  *21* *6* *160* *110* *3.9* 

**Mazda RX4 Wag** *21* 6 160 110 3.9 

    **Datsun 710** *22.8* 4 108 93 3.85 
---------------------------------------------------- 

lub bezpośrednio z pander metody:

> emphasize.strong.cells(which(t > 20, arr.ind = TRUE)) 
> pander(t) 

--------------------------------------------------------- 
     &nbsp;   mpg  cyl disp  hp  drat 
------------------- -------- ----- ------- ------- ------ 
    **Mazda RX4**  **21** 6 **160** **110** 3.9 

**Mazda RX4 Wag** **21** 6 **160** **110** 3.9 

    **Datsun 710** **22.8** 4 **108** **93** 3.85 
--------------------------------------------------------- 

Należy pamiętać, że te nowe funkcje nie są jeszcze publikowane w systemie CRAN, ale można je znaleźć w najnowszej wersji hostowanej pod numerem GitHub.

17

Tutaj rozwiązanie oparte na xtable z niestandardowym css. Myślę, że rozwiązanie jest elastyczne, ponieważ kiedy już to zrobisz, możesz dostosować swoje tabele html w nieskończoność, jeśli znasz jakieś triki.

Tutaj idziemy.Rozwiązanie składa się z 3 plików:

  1. Plik css, w którym zmieniono kolor wiersza tabeli.

    table { 
        max-width: 95%; 
        border: 1px solid #ccc; 
    } 
    
    th { 
        background-color: #000000; 
    color: #ffffff; 
    } 
    
    table tr:nth-child(odd) td{ 
        background-color: #FF0000; 
    } 
    table tr:nth-child(even) td{ 
        background-color: #00FFFF; 
    } 
    
  2. plik skryptu R, aby ustawić RStudio przecen o następującej treści:

    options(rstudio.markdownToHTML = 
         function(inputFile, outputFile) {  
         require(markdown) 
         markdownToHTML(inputFile, outputFile, stylesheet='customstyle.css') 
         } 
    ) 
    
  3. utworzyć nowy przecen z następujących czynności:

    ```{r} 
    source('initmd.R') 
    ``` 
    
    
    ```{r,results='asis'} 
    library(xtable) 
    n <- data.frame(x = c(1,1,1,1,1), y = c(0,1,0,1,0)) 
    print(xtable(n),type='html') 
    ``` 
    

wreszcie przekonwertować markdwon do html za pomocą przycisku knit HTML i powinieneś dostać coś takiego :

enter image description here

Powiązane problemy