2017-06-01 10 views
0

カラム2のデータの種類に応じて、テーブルの各行にカラーコードを作成しようとしています。ラテンアメリカのための同じRセルの内容に応じて光沢のあるカラーコードテーブルの行

enter image description here

基本的にはあなたの例を与えるために、コードが列2に依存して作業する必要があり、それは例えばサハラ以南のアフリカを言うならば、全体の行に特定の色を作成し、カリブの色は違う。 [Region]列の右には他にもいくつかの列があります。私は以下のdataTable関数にいくつかのif文が必要かもしれないと思っていますが、何か助けていただければ幸いです。

output$Composite <- renderDataTable(datatable(FVI_DATA_COMPOSITE, 
               options = list(
               columnDefs = list(list(className = 'dt-center', targets = 3:9)))) 
               %>% formatRound(c(3:9), 2)) 

編集:現在動作していない新しいコードブロック。

output$Composite <- renderDataTable(datatable(FVI_DATA_COMPOSITE, 
               options = list(
               columnDefs = list(list(className = 'dt-center', targets = 3:9)), pageLength = 50, lengthChange = FALSE)) 
               %>% formatRound(c(3:9), 2)) 
               %>% formatStyle(0, target = "row", 
               backgroundColor = styleEqual(which(FVI_DATA_COMPOSITE$Region == "Sub-Saharan Africa")[1], "red")) 

答えて

2

@GGambaが少し速かったです。しかし、それはあなたがセットにtarget = "row"パラメータを使用する場合は、実際にJSせずに行全体をフォーマットすることができ、あなたに興味があるかもしれない:

library(shiny) 
library(magrittr) 
library(DT) 
shinyApp(
    ui = fluidPage(
    fluidRow(
     column(12, 
      dataTableOutput('table') 
    ) 
    ) 
), 
    server = function(input, output) { 
    output$table <- renderDataTable({ 
     datatable(iris) %>% 
     formatStyle(0, target = "row", backgroundColor = styleEqual(which(iris$Sepal.Length < 5)[1], "red")) 
    }) 
    } 
) 
} 
+0

ありがとう、どのように私のコード例に収まるでしょうか? – OwlieW

+0

これから知ることができるのは、完全なアプリと使用しているデータセットを提供することです。あるいは、他の再現可能な例... 'styleEqual()'関数の最初の値をデータ内の条件に置き換えるか、サンプルデータを私たちと共有する必要があります。 – BigDataScientist

+0

私は正確なデータを共有することはできませんが、あなたの提案に取り組んでいるコードブロックを追加してください。編集した質問 – OwlieW

0

条件付き単一セルをフォーマットするには容易DT helper functionで行われる:

library(DT) 
datatable(mtcars) %>% 
    formatStyle(0, 
       backgroundColor = styleEqual(c('Mazda RX4', 'Mazda RX4 Wag'), 
              c('green', 'red') 
       ) 
    ) 

は条件付き行全体をフォーマットし、一方で、我々はrowCallbackオプションで、いくつかのJSを使用しなければなりません。

これらの線に沿って何か:

library(DT) 
datatable(FVI_DATA_COMPOSITE, 
      options = list(
       rowCallback = JS('function(nRow, aData) {  
           if (aData[1] == "Sub-Saharan Africa") 
            $(nRow).css("background-color", "#9BF59B"); 
           if (aData[1] == "Latin America ") 
            $(nRow).css("background-color", "#yellow"); 
           }'), 
       columnDefs = list(list(className = 'dt-center', targets = 3:9)) 
     ) 
) %>% 
    formatRound(c(3:9), 2)) 
+0

は、ありがとうございあるように、そのコードを使用することができ、または私は必要なのですか何かを変更する。私もそれを入れようとしましたが、テーブルを開こうとしたときに処理を掛けているだけでした。また、最初の列は国であり、2番目の列は色を適用するためにチェックする領域です。インデックスを1ではなく2にする必要がありますか? – OwlieW

+0

あなたの最初の部分について:まだ見ていない場合は、 'target =" row "'を行に使うことができます(上記の他の記事を参照してください)... – BigDataScientist

+1

私は見てupvoted :)は更新したくありませんでした私の答えを削除しないでください、それは端の場合に役立つかもしれません(どちらが、しかし..) – GGamba

関連する問題