2013-03-14 28 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 

xとyの値が異なる行をハイライト表示したい。この場合、行1,3、および5になります.HTMLファイルの出力がHTML表になるといいでしょうが、イメージがうまくいくかどうかは分かりません。

+0

http://stackoverflow.com/questions/25315309/conditional-formatting-tables-in-rmarkdown-documents、ReportRsパッケージを提案しFlexTable – rescdsk

答えて

22

いつもpandoc.tableを私のpander packageに広げたかったのですが、その時間を得ることができませんでした。しかし、この質問は本当に感動的です、おそらく数日後にそれを行うでしょう。それまでは、何について:あなたの行がPandocで強いとしてマークする

n <- data.frame(x = c(1,1,1,1,1), y = c(0,1,0,1,0)) 
  • 更新:

    library(pander) 
    
  • は、あなたのデータをロードします

    1. ロードパッケージ:

      for (i in c(1, 3, 5)) 
          n[i, ] <- pandoc.strong.return(n[1, ]) 
      
    2. 0123例えばする

      pandoc.table(n) 
      pander(n)  # S3 method 
      
    3. 隠密値下げ:

    4. は、あなたのテーブルの値下げバージョンを表示します

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

    更新:brew構文で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はいくつかをあげました

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

    、または直接:でも簡単にテーブルのセルを強調表示するヘルパー関数

    > 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

    に基づく解決策は、cssです。私は解決策が柔軟であると思います。なぜなら、いったん作業が始まると、あなたはcssを知っていれば無限にHTMLテーブルをカスタマイズできます。

    ここに移動します。このソリューションは、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値下げを設定するRスクリプトファイル:

      options(rstudio.markdownToHTML = 
           function(inputFile, outputFile) {  
           require(markdown) 
           markdownToHTML(inputFile, outputFile, stylesheet='customstyle.css') 
           } 
      ) 
      
    3. は、以下の新しいマークダウンを作成します。

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

    を最終的に変換しますmarkdwonをknit HTMLボタンを使ってhtmlにしてください:

    enter image description here

    関連する問題