r - 如何使用 R Markdown 显式设置 R DT 表的列宽?

标签 r knitr r-markdown dt

我有一个包含多个变量的表,这些变量具有长变量名称和长字符串作为多个观察值。如何显式设置每列宽度,以便通过 R Markdown 呈现为 HTML 的表格不会自动加倍行以将长字符串放入单元格中?

即使表格无法同时显示所有列,也可以有一些足够长的列。但是,我始终可以使用“FixedColumns”扩展和滚动条向右移动更多列。

我当前用于设置列宽的代码是:

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

但无论我如何设置不同的宽度,最终渲染的表格看起来都没有太大不同。

这里是我在 rmarkdown 中使用的一些可重新生成的代码,包括生成 HTML 中的模拟数据和 DT 对象。

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

以下是使用上述代码以 HTML 形式生成的 DT 的屏幕截图: enter image description here

我真正想要的是将前两列的列宽设置得足够长,这样每行中的值就不会像这样困惑。我还希望将第 4:9 列的宽度设置为相同。但目前看来,这些列的宽度取决于变量名称的长度,这看起来不太好。我可以在这里采取任何解决方法来改进吗?谢谢,

最佳答案

您可以通过将以下 css 添加到 html 文件来获得单行列:

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

或者创建一个单独的 .ccs 文件并将其包含在 yaml header 中。请参阅克利夫顿的评论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 扩展时设置宽度。

关于r - 如何使用 R Markdown 显式设置 R DT 表的列宽?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36989320/

相关文章:

sql - 等同于带data.table的sql笛卡尔查询

r - 从电子邮件和 R 中的两个点之间提取文本

r - 如何在 R Markdown 中嵌入本地视频?

r - 带参数渲染时如何缓存中间结果?

r - 如何在 Rmarkdown 渲染中使用 kable 或任何其他表格包作为默认值

r - 在 R 中使用带有 map 数据的 ggplot 创建动画

r - 从 sf linestring 对象创建具有正确索引标签的 inla.graph 对象

r - kable/kableExtra 的条件输出样式

r - RMarkdown 中的命令是 "source"并显示现有 .R 文件中的代码?

r - 在 R Markdown Beamer 演示文稿的标题中插入手动段落