2013-03-14 14 views
17

के साथ सशर्त स्वरूपण वाली तालिकाएं बनाएं मेरे पास डेटा फ्रेम है और मैं इसे सफ़ेद स्वरूपण वाली तालिका के रूप में knitr और RMarkdown के माध्यम से एक HTML फ़ाइल में आउटपुट करना चाहता हूं। उदाहरण: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 

मैं पंक्तियों को एक्स और वाई के विभिन्न मानों के साथ हाइलाइट करना चाहता हूं। तो इस मामले में, यह 1, 3 और 5 पंक्तियां होगी। अगर अच्छा होगा तो HTML फ़ाइल में आउटपुट एक HTML तालिका होगी, लेकिन असफल हो रहा है कि एक छवि भी ठीक होगी।

+0

http://stackoverflow.com/questions/25315309/conditional-formatting-tables-in-rmarkdown-documents ReportRs पैकेज पता चलता है, FlexTable – rescdsk

उत्तर

22

मैं हमेशा इस सुविधा के साथ pander package में pandoc.table का विस्तार करना चाहता था, लेकिन इसके लिए समय नहीं मिला। लेकिन यह सवाल वास्तव में प्रेरणादायक है, शायद अगले कुछ दिनों में ऐसा करेगा। तब तक, किस बारे में:

  1. लोड पैकेज:

    n <- data.frame(x = c(1,1,1,1,1), y = c(0,1,0,1,0)) 
    
  2. अद्यतन अपने लाइनों मजबूत Pandoc में के रूप में चिह्नित किया जाना चाहिए:

    library(pander) 
    
  3. अपने डेटा लोड:

    for (i in c(1, 3, 5)) 
        n[i, ] <- pandoc.strong.return(n[1, ]) 
    
  4. अपनी तालिका के markdown संस्करण दिखाएं:

    pandoc.table(n) 
    pander(n)  # S3 method 
    
  5. गुप्त markdown उदा brew वाक्य रचना के साथ HTML:

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

अद्यतन: मैं pander अद्यतन किया है कुछ नए तर्क लेने के लिए आसानी से पंक्तियां/स्तंभ/कोशिकाओं पर प्रकाश डाला। हालांकि मैं अभी भी कुछ आगे सहायक कार्यों पर काम कर रहा हूँ इस प्रक्रिया को आसान बनाने के लिए, यहाँ एक त्वरित प्रदर्शन चला जाता है, ताकि आप देख सकते हैं कि यह कैसे अपने कार्यप्रवाह मदद कर सकता है:

> 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 
----------- 

अद्यतन: कुछpander प्राप्त की

> 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 
---------------------------------------------------- 
pander विधि के साथ

या सीधे:

सहायक कार्यों और भी आसान तालिकाओं में कोशिकाओं को उजागर करना
> 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 
--------------------------------------------------------- 

कृपया ध्यान दें कि ये नई सुविधाएं अभी तक CRAN पर प्रकाशित नहीं हैं, लेकिन आप GitHub पर होस्ट किए गए नवीनतम संस्करण में पा सकते हैं।

17

यहां एक समाधान xtable पर आधारित एक कस्टम css के साथ एक समाधान है। मुझे लगता है कि जब आप इसे काम करते हैं तो समाधान लचीला होता है, यदि आप कुछ सीएसएस चाल जानते हैं तो आप अनिश्चित काल तक अपने एचटीएमएल टेबल को कस्टमाइज़ कर सकते हैं।

यहां हम जाते हैं।समाधान में 3 फाइलें शामिल हैं:

  1. एक सीएसएस फ़ाइल जहां मैं वैकल्पिक तालिका पंक्ति रंग।

    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. एक अनुसंधान स्क्रिप्ट फ़ाइल निम्नलिखित सामग्री के साथ RStudio markdown स्थापित करने के लिए:

    ```{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') 
    ``` 
    

अंत में कन्वर्ट:

options(rstudio.markdownToHTML = 
     function(inputFile, outputFile) {  
     require(markdown) 
     markdownToHTML(inputFile, outputFile, stylesheet='customstyle.css') 
     } 
) 
  • निम्नलिखित के साथ एक नया markdown बनाने knit HTML बटन का उपयोग कर एचटीएमएल पर मार्कडॉन करें और आपको ऐसा कुछ मिलना चाहिए :

    enter image description here