2016-06-27 18 views
5

मेरे पास एक आईडी कॉलम और एकाधिक संख्यात्मक कॉलम के साथ डेटा.फ्रेम है, संख्यात्मक कॉलम की मात्रा भिन्न हो सकती है। इन सांख्यिक स्तंभों में से मैं कॉलम के ऊपर के सभी मूल्यों को हरा देना चाहता हूं और कॉलम के नीचे सभी मानों का मतलब लाल है। नीचे दिया गया कोड मेरा वांछित परिणाम देता है, लेकिन यह डेटा फ्रेम के लिए कम या कम संख्यात्मक कॉलम के साथ एक सामान्य कोड नहीं है।प्रारूप एकाधिक कॉलम पर स्टाइल डीटी आर

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

संबंधित मुद्दे