2016-05-02 6 views
10

Ich habe eine Tabelle mit mehreren Variablen mit langen Variablennamen und langen Zeichenfolgen als Werte für mehrere Beobachtungen. Wie kann ich explizit jede Spaltenbreite festlegen, sodass die Tabelle, die über R Markdown in HTML gerendert wird, die Zeilen nicht automatisch so verdoppelt, dass sie in die Zelle passen?Wie kann ich explizit die Spaltenbreite für R DT-Tabellen mit R Markdown setzen?

Es wäre in Ordnung für mich, einige Spalten zu haben, die lang genug sind, auch wenn die Tabelle nicht alle Spalten gleichzeitig anzeigen kann. Aber ich kann immer die 'FixedColumns'-Erweiterung und die Bildlaufleiste verwenden, um für weitere Spalten nach rechts zu gehen.

Die Codes Ich bin derzeit mit der Spaltenbreite eingestellt sind:

options = list(
    autowidth = TRUE, 
    columnDefs = list(list(width = '600px', targets = c(1, 2))), 

Aber egal, wie ich die Breite unterschiedlich festgelegt, die endgültige gerenderte Tabelle doest sehen gar viel anders.

Hier sind einige reproduzierbare Codes, die ich in rmarkdown verwendet habe, einschließlich der Generierung der Mock-Daten und des DT-Objekts in HTML.

```{r} 
# generate data 
vec_1 <- c("DHDH, DDDDDTV", 
     "DHDH, DDDDDTV, TT&T", 
     "DHDH, DDDDDTV, TT&T, Caaater", 
     "DHDH, DDDDDTV, TT&T, Caaater, Cxx", 
     "DHDH, DDDDDTV, TT&T, Cxx", 
     "DHDH, DDDDDTV, Caaater",   
     "DHDH, DDDDDTV, Caaater, Cxx", 
     "DHDH, DDDDDTV, Cxx") 

vec_2 <- c("Some radomn long string aaa bbb ccc dddd aaa bbb ccccccc", 
     "Some radomn long stringa", 
     "Some string aaa bbb", 
     "Some radomn long string aaa bbb ccc dddd aaa bb (A)", 
     "Some radomn long string aaa bbb ccc dddd aaa b (B)", 
     "Some radomn long string aaa bbb ccc dd (D)", 
     "Some radomn long string aaa bbb ccc ddd (D)", 
     "Some radomn long string aaa bbb ccc d (D)", 
     "Some radomn long string aaa bbb ccc ddd aaa bbb dddaa (G)", 
     "Some radomn long string aaa bbb ccc ddd aaa bbb dddaa(G)", 
     "Some radomn long string aaa bbb ccc ddd aaa bbb ddd (G)", 
     "Some radomn long strin(H)", 
     "Some radomn long string (G)", 
     "Some radomn long (Beee)") 

col_1 <- sort(rep(vec_1, 14)) 
col_2 <- rep(vec_2, 8) 
col_3 <- c(rep(105, 14), rep(29, 14), rep(22, 14), rep(2, 14), 
     rep(10, 14), rep(29, 14), rep(5, 14), rep(8, 14)) 
col_4 <- rnorm(112) 
col_5 <- rnorm(112) 
col_6 <- rnorm(112) 
col_7 <- rnorm(112) 
col_8 <- rnorm(112) 
col_9 <- rnorm(112) 

df <- data.frame(col_1, col_2, col_3, col_4, col_5, col_6, col_7, col_8, col_9) 
``` 

```{r} 
library(DT) 

datatable(
    df, 
    colnames = c("Source Type", "Factors", 
       "Market Counts", "Minimum", "1st Qu", 
       "Median", "Mean", "3rd Qu", "Maximum"), 
    extensions = 'FixedColumns', 
    options = list(
     autowidth = TRUE, 
     columnDefs = list(list(width = '600px', targets = c(1, 2))), 
     pageLength = 14, 
     lengthMenu = c(7, 14, 28, 36), 
     scrollX = TRUE, 
     fixedColumns = TRUE 
     )) %>% 
    formatRound(4:9, digits = 2) 
``` 

Hier ist ein Screen-Shot des in HTML erzeugt DT über Codes: enter image description here

Was will ich wirklich ist die Spaltenbreite für die ersten zwei Spalten lang genug eingestellt, so die Werte in jeder Reihe wird nicht Krempel so sein. Ich möchte auch, dass die Breite für Spalte 4: 9 gleich eingestellt wird. Aber es sieht so aus, dass die Breite dieser Spalten derzeit von der Länge der Variablennamen abhängt, die nicht so gut aussehen. Irgendwelche Workarounds, die ich hier verbessern kann? Danke,

+0

Ich denke, dass das Problem hier ist im Wesentlichen das gleiche wie [hier] (http://stackoverflow.com/questions/34850382/setting-column-width-in-r-shiny-datatable-does-not-work- In-Fall-von-Losen-of-colum? lq = 1): Bei zu vielen Spalten werden Spaltenbreiten ignoriert. –

Antwort

1

Sie können eine Spalte eine Zeile erhalten, indem Sie den folgenden CSS, um Ihre HTML-Datei hinzufügen:

<style> 
table.display td { white-space: nowrap; } 
</style> 

Alternativ eine separate .ccs Datei machen und schließen Sie sie mit dem YAML-Header. Sehen Sie den Kommentar von Clifton here für weitere Diskussionen zu diesem Thema.

Ich konnte die Breite der anderen Spalten nicht schnell festlegen. Ich habe versucht, so etwas wie:

```{r} 
library(DT) 

datatable(
    df, 
    colnames = c("Source Type", "Factors", 
       "Market Counts", "Minimum", "1st Qu", 
       "Median", "Mean", "3rd Qu", "Maximum"), 
    extensions = 'FixedColumns', 
    options = list(
     autowidth = FALSE, 
     columnDefs = list(list(width = '600px', targets = c(1, 2)), 
          list(width = '100px', targets = 3:(ncol(df) - 2))), 
     pageLength = 14, 
     lengthMenu = c(7, 14, 28, 36), 
     scrollX = TRUE, 
     fixedColumns = TRUE 
     )) %>% 
    formatRound(4:9, digits = 2) 
``` 

ich denke, es an die genannten Punkte here bezüglich Einstellung der Breite bezogen wird, wenn die fixedColumns Erweiterung.