2017-06-01 47 views
0

我想根据列2中的数据对表格的每一行进行颜色编码。请参见下图。R取决于单元格内容的闪亮颜色代码表行

enter image description here

基本上给你一个例子,代码需要工作取决于两个列,因此,如果说撒哈拉以南非洲例如,使整个行某一种颜色,同为拉美和加勒比海但是有不同的颜色。 “区域”列右侧还有其他几列。我想我可能需要在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') 
       ) 
    ) 

有条件格式化整个行,而另一方面,我们不得不使用一些JS在rowCallback选项。

东西沿着这些路线:

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? – OwlieW

+0

关于你的第一部分:如果你还没有看到,你可以使用'target =“row”'作为行(见上面的其他文章),... – BigDataScientist

+1

我确实看到并且upvoted :)不想更新也不删除我的答案,它可能对边缘情况有帮助(不知道哪个,但是..) – GGamba