2016-06-27 2 views
5

하나의 ID 열과 여러 개의 숫자 열이있는 data.frame이 있습니다. 숫자 열의 양이 다를 수 있습니다. 이 숫자 열 중 열 위의 모든 값을 색칠하려면 녹색을 의미하고 열 아래의 모든 값은 빨간색을 의미합니다. 아래 코드는 필자가 원하는 결과를 제공하지만 숫자 열이 많거나 적은 데이터 프레임의 일반적인 코드는 아닙니다.format 여러 열로 묶음 DT R

library(DT) 

data2 <- cbind(ID = "some ID",iris[,1:4]) 

    datatable(
     data2, rownames = FALSE, class = 'cell-border stripe', 
     options = list(
     dom = 't', pageLength = -1, lengthMenu = list(c(-1), c('All')) 
    ) 
) %>% 
    formatStyle(colnames(data)[2], backgroundColor = styleInterval(mean(data[,2]), c("red","green"))) %>% 
    formatStyle(colnames(data)[3], backgroundColor = styleInterval(mean(data[,3]), c("red","green"))) %>% 
    formatStyle(colnames(data)[4], backgroundColor = styleInterval(mean(data[,4]), c("red","green"))) %>% 
    formatStyle(colnames(data)[5], backgroundColor = styleInterval(mean(data[,5]), c("red","green"))) 

위의 코드를 아래 코드로 바꾸고 싶지만 작동하지 않습니다. 숫자 열의 수가 변경되면 아래 코드도 작동합니다.

datatable(
    data2, rownames = FALSE, class = 'cell-border stripe', 
    options = list(
    dom = 't', pageLength = -1, lengthMenu = list(c(-1), c('All')) 
) 
) %>% 
    formatStyle(colnames(data2)[2:ncol(data2)], backgroundColor = styleInterval(colMeans(data2[,2:ncol(data2)]), c("red","green"))) 

이것은 가능합니까? 그래, 어떻게?

답변

3

당신은 당신이 생성 할 수 있습니다

hepl_1=sapply(2:ncol(data2),function(i) ifelse(data2[[i]]>=mean(data2[[i]]),"rgb(255,0,0)","rgb(0,255,0)")) 
help_3=as.matrix(data2[2:ncol(data2)]) 

datatable(
    data2, rownames = FALSE, class = 'cell-border stripe', 
    options = list(
    dom = 't', pageLength = -1, lengthMenu = list(c(-1), c('All')) 
) 
) %>% 
    formatStyle(colnames(data2)[2:ncol(data2)], backgroundColor = styleEqual(help_3, hepl_1)) 

업데이트

(안 다른 열에서 같은 값 작업)와 같은 추가 계산 함께 할 수 rowCallback

datatable(
    data2, rownames = FALSE, class = 'cell-border stripe', 
    options = list(
    dom = 't', pageLength = -1, lengthMenu = list(c(-1), c('All')), 
    rowCallback=JS(paste0("function(row, data) {\n", 
          paste(sapply(2:ncol(data2),function(i) paste0("var value=data[",i-1,"]; if (value!==null) $(this.api().cell(row,",i-1,").node()).css({'background-color':value <=", mean(data2[[i]])," ? 'red' : 'green'});\n") 
         ),collapse = "\n"),"}")) 
) 
) 
같은
+0

매트가있는 아이디어 숫자가있는 행렬과 해당 색상이있는 행렬은 열이 빨간색이고 다른 녹색 인 경우 다른 열에 동일한 값을 사용하면 작동하지 않습니다. 그러면 첫 번째 열의 색이 표시됩니다. – Berecht

+0

아 .. 네 말이 맞아 ... 그것에 대해 생각할 것입니다. – Batanichek

+0

색을 결정한 후에 지터를 주거나 무작위로 지정할 수 있습니다. 생성 된 난수가 고유한지 확인해야합니다. – Berecht

관련 문제