19

データ フレームがあり、knitr と RMarkdown を使用して、これを条件付き書式付きのテーブルとして HTML ファイルに出力したいと考えています。例:

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 テーブルであればよいのですが、そうでない場合は画像でも問題ありません。

4

2 に答える 2

24

私はいつも、この機能を使ってpander パッケージpandoc.tableを拡張したいと思っていましたが、そのための時間を確保できませんでした。しかし、この質問は本当に刺激的で、おそらく今後数日でそれを行うでしょう. それまでは、次のことはどうでしょうか。

  1. パッケージをロードします。

    library(pander)
    
  2. データをロードします。

    n <- data.frame(x = c(1,1,1,1,1), y = c(0,1,0,1,0))
    
  3. Pandocで強いとマークされるように行を更新します。

    for (i in c(1, 3, 5))
        n[i, ] <- pandoc.strong.return(n[1, ])
    
  4. テーブルのマークダウン バージョンを表示します。

    pandoc.table(n)
    pander(n)       # S3 method
    
  5. 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でホストされている最新バージョンで見つけることができることに注意してください。

于 2013-03-14T08:45:56.037 に答える
18

xtableここでは、カスタムに基づくソリューションですcss。一旦それが機能するようになると、いくつかのcssのトリックを知っていれば、htmlテーブルを無期限にカスタマイズできるので、ソリューションは柔軟だと思います。

どうぞ。ソリューションは3つのファイルで構成されています。

  1. テーブルの行の色を変更するcssファイル。

    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をhtmlに変換すると、次のknit HTMLようになります。

ここに画像の説明を入力してください

于 2013-03-14T09:08:25.827 に答える