2017-10-20 6 views
1

Ich habe eine Daten.Tabelle, die ich mit DT anzeigen. In zwei Spalten zeige ich Prozentsätze an und möchte Hintergrundbalken anzeigen. Die Anzahl der Spalten kann sich jedoch abhängig von der ausgewählten Tabelle ändern. Es wird entweder eine oder zwei Prozentspalten geben.DT Datentabelle Anzeige Fehler

Hier sind einige Dummy-Daten und mein Ansatz bisher, die Grep erfolglos verwendet.

a <- c(45, 143, 123, 120, 118, 109, 94, 81) 
b <- c(54, 132, 119, 113, 108, 104, 99, 91) 
a2 <- round(a/sum(a)*100,2) 
b2 <- round(b/sum(b)*100,2) 

dt <- data.table("Age" = c("-20", "20-30", "30-40", "40-50", 
          "50-60", "60-70", "70-80", "80+"), 
       "Group A" = a, 
       "Group A %" = a2, 
       "Group B" = b, 
       "Group B %" = b2) 


if(sample(c(0,1), 1)==1) x <- dt else x <- dt[ ,c(1:3)] 

DT::datatable(x, 
       rownames = FALSE, 
       extensions = c('FixedColumns'), 
       class = 'cell-border stripe', 
       options = list(dom = 't', 
          pageLength = nrow(x), 
          columnDefs = list(list(className = 'dt-center', targets = 0:(ncol(x)-1))) 
          ) 
      ) %>% 
    formatStyle(
    grep("%", colnames(x), value=TRUE), 
    background = styleColorBar(x[, .SD, .SDcols=grep("%", colnames(x), value=TRUE)], 'steelblue'), 
    backgroundSize = '50% 50%', 
    backgroundRepeat = 'no-repeat', 
    backgroundPosition = 'right') 

Leider schaffen diese den Fehler:

*Error in FUN(X[[i]], ...) : only defined on a data frame with all numeric variables* 

So wie kann ich dynamisch die Spalten auswählen, die Balken angezeigt werden?

Jede Hilfe sehr geschätzt.

Antwort

1

Das Problem kommt von range() in , da es einen numerischen oder Zeichenvektor erwartet.

Wenn Sie nur die Werte der Spalten übergeben, die Sie anwenden möchten, funktioniert css. Sie können styleColorBar = unlist(x[, .SD, .SDcols=grep("%", colnames(x), value=TRUE)]) verwenden genau das zu tun:

DT::datatable(x, 
       rownames = FALSE, 
       extensions = c('FixedColumns'), 
       class = 'cell-border stripe', 
       options = list(dom = 't', 
          pageLength = nrow(x), 
          columnDefs = list(list(className = 'dt-center', targets = 0:(ncol(x)-1))) 
      ) 
) %>% 
    formatStyle(
    columns = grep("%", colnames(x), value=TRUE), 
    background = styleColorBar(unlist(x[, .SD, .SDcols=grep("%", colnames(x), value=TRUE)]), 'steelblue'), 
    backgroundSize = '50% 50%', 
    backgroundRepeat = 'no-repeat', 
    backgroundPosition = 'right') 

Diese

enter image description here

+0

Perfekt und ohne große Rewrite zurückkehren wird. Vielen Dank. –

Verwandte Themen