2016-05-02 1 views
10

У меня есть таблица с несколькими переменными с длинными именами переменных и длинными символьными строками в качестве значений для нескольких наблюдений. Как я могу явно задать каждую ширину столбца, поэтому таблица, отображаемая в HTML через R Markdown, не будет автоматически удваивать строки, чтобы соответствовать длинной строке в ячейке?Как я могу явно задать ширину столбца для таблиц R DT с использованием R Markdown?

Было бы хорошо, если бы у меня были некоторые столбцы, которые достаточно длинные, даже если таблица не может отображать все столбцы одновременно. Но я всегда могу использовать расширение «FixedColumns» и полосу прокрутки для перемещения вправо для большего количества столбцов.

коды В настоящее время я использую, чтобы установить ширину столбца является:

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

Но независимо от того, как установить ширину по-разному, окончательные визуализации таблица выглядит слишком делает сильно отличается на всех.

Ниже приведены некоторые повторяющиеся коды, которые я использовал в rmarkdown, в том числе генерирование макетных данных и объекта DT в 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) 
``` 

Вот скрин-шоты DT производится в HTML с использованием вышеуказанных кодов: enter image description here

То, что я действительно хочу, чтобы установить ширину столбца в течение первых двух столбцов достаточно долго, так что значения в каждой строке не будет помех, как это. Я также хотел бы, чтобы ширина для столбца 4: 9 была установлена ​​одинаково. Но похоже, что в настоящее время ширина этих столбцов зависит от длины имен переменных, которая не выглядит такой замечательной. Какие-нибудь обходные пути, которые я могу сделать для улучшения? Спасибо,

+0

Я думаю, что проблема здесь в основном такая же, как [здесь] (http://stackoverflow.com/questions/34850382/setting-column-width-in-r-shiny-datatable-does-not-work- in-case-of-colo? lq = 1): при слишком большом количестве столбцов ширина столбцов игнорируется. –

ответ

1

Вы можете получить столбец в одну строку, добавив следующий CSS для вашего HTML файла:

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

Альтернативно сделать отдельный .ccs файл и включить его с заголовком YAML. См. Комментарий от clifton here для дальнейших обсуждений по этой проблеме.

Я не мог быстро установить ширину других столбцов. Я пытался что-то вроде:

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

Я думаю, что это связано с точками из here относительно установки ширины при использовании расширения fixedColumns.