2016-05-02 15 views
10

Mam tabelę z wieloma zmiennymi o długich nazwach zmiennych i długich ciągach znaków jako wartości dla wielu obserwacji. W jaki sposób mogę jawnie ustawić szerokość każdej kolumny, aby tabela renderowana do HTML za pomocą R Markdown nie podwoiła automatycznie linii, aby dopasować długi ciąg do komórki?Jak mogę jawnie ustawić szerokość kolumny dla tabel R DT za pomocą R Markdown?

Byłoby dobrze mieć kilka kolumn, które są wystarczająco długie, nawet jeśli tabela nie jest w stanie pokazać wszystkich kolumn w tym samym czasie. Ale zawsze mogę użyć rozszerzenia i paska przewijania "FixedColumns", aby przejść w prawo, aby uzyskać więcej kolumn.

Kody Obecnie używam ustawić szerokość kolumny to:

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

Ale bez względu na to, w jaki sposób ustawić szerokość inaczej, ostateczna wygenerowana tabela czynisz wyglądają zbyt wiele inny w ogóle.

Oto niektóre kody, które można ponownie wydrukować, które zostały użyte w programie rmarkdown, w tym generowanie próbnych danych i obiektu DT w 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) 
``` 

Oto screen-shot DT produkowane w HTML przy użyciu powyższych kodów: enter image description here

Co ja naprawdę chcę to ustawić szerokość kolumny dla pierwszych dwóch kolumnach wystarczająco długo, więc wartości w każdym rzędzie nie będzie takich bałaganów. Chciałbym również ustawić taką samą szerokość dla kolumny 4: 9. Wygląda jednak na to, że obecnie szerokość tych kolumn zależy od długości nazw zmiennych, która nie wygląda tak dobrze. Jakiekolwiek obejścia, które mogę tutaj poprawić? Dzięki,

+0

Myślę, że problem tutaj jest zasadniczo taki sam jak [tutaj] (http://stackoverflow.com/questions/34850382/setting-column-width-in-r-shiny-datatable-does-not-work- in-case-of-lots-of-colum? lq = 1): Przy zbyt wielu kolumnach szerokości kolumn są ignorowane. –

Odpowiedz

1

Można uzyskać kolumnę jeden wiersz dodając następujące css do pliku html:

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

Ewentualnie dokonać oddzielna .ccs plik i umieścić go z nagłówkiem YAML. Zobacz komentarz autorstwa clifton here w celu dalszej dyskusji na ten temat.

Nie mogłem szybko ustawić szerokości innych kolumn. Próbowałem coś takiego:

```{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) 
``` 

myślę, że to jest związane z uwagami here dotyczące ustawiania szerokości przy użyciu rozszerzenia fixedColumns.