使 html table 列更宽/防止单词在 RMarkdown 中换行
Make html table columns wider / prevent words from wrapping in RMarkdown
我正在用 R markdown 创建一个 html 文档,其中有一些 tables。在 table 的一列有字符值的情况下,如何确保该列足够宽以包含整个字符串而不换行?我尝试在下面使用 kableExtra
,但似乎 column_spec
的 width
参数没有被使用,即使 bold
参数是。
library(data.table)
csd <- fread(' Oct-17 Sep-17 Aug-17 Jul-17 Jun-17 May-17 Apr-17 Mar-17 Feb-17 Jan-17 Dec-16 Nov-16 Oct-16 Sep-16 2017 YTD 2016 YTD 2015 YTD
V1
V2 71,687 74,492 72,772 74,785 77,084 72,819 85,367 77,403 85,131 81,585 80,186 89,810 92,871 691,540 1,141,589 1,207,433
V3 22,788 22,355 23,093 23,239 23,821 23,005 25,883 22,168 24,812 23,715 22,708 28,128 29,366 211,164 353,006 411,659
V4 #DIV/0! 31.8% 30.0% 31.7% 31.1% 30.9% 31.6% 30.3% 28.6% 29.1% 29.1% 28.3% 31.3% 31.6% 30.5% 30.9% 34.1%
Some long variable name 30,047 31,910 30,046 31,766 33,455 30,913 37,524 33,683 37,589 36,571 35,590 44,447 44,295 296,933 516,597 528,305
V5 2.89% 1.83% 1.55% 1.97% 2.85% 1.37% 4.95% 5.54% 3.45% 3.12% 1.92% 2.65% 1.69% 3.01% 2.04% 0.61%
V6 867 583 465 626 952 422 1,857 1,866 1,298 1,140 682 1,179 748 8,936 10,539 3,201
V7 29,180 31,327 29,581 31,140 32,503 30,491 35,667 31,817 36,291 35,431 34,908 43,268 43,547 287,997 506,058 525,104
V8 0:23 0:15 0:10 0:20 0:29 0:14 0:53 1:03 0:33 0:24 0:20 0:25 0:17 0:29 0:21 0:06
V9 4:53 4:44 4:46 5:00 5:01 5:05 5:01 5:05 5:01 4:57 5:01 4:49 4:52 4:57 4:47 4:11
V10 86% 91% 94% 89% 83% 91% 78% 72% 81% 86% 89% 85% 92% 85% 89% 94%
V11 99.05% 98.20% 96.40% 97.25% 97.80% 96.50% 95.55% 95.85% 95.65% 96.25% 96.55% 97.75% 97.95% 96.92% 97.33% 98.23%
V12 99.75% 100.00% 99.90% 98.85% 99.00% 98.75% 99.00% 99.55% 99.85% 99.45% 99.20% 97.70% 97.55% 99.41% 98.50% 99.01%
')
csd <- csd[-1,-2]
names(csd)[1] <- 'V0'
words <- c('these','are','some','words','extreme','slightly')
csd[,1] <- replicate(nrow(csd), paste(sample(words, 7, T), collapse = " "))
library(knitr)
library(magrittr)
library(kableExtra)
csd %>%
kable('html', digits = 2) %>%
column_spec(1, bold = T, width = "2600em") %>%
kable_styling(bootstrap_options = c("striped", "hover"))
我认为这更像是一个 HTML/css 问题。当 HTML table 的宽度超过页面宽度时,如果没有必要,它会尝试减少列宽。如果减少 csd
的列数,您将看到 width
选项开始显示效果。
在这种情况下,一种解决方法是使用 scroll_box
函数并为 table 提供更宽的绘图区域。
csd %>%
kable('html', digits = 2) %>%
column_spec(1, bold = T, width = "2600em") %>%
kable_styling(bootstrap_options = c("striped", "hover")) %>%
scroll_box(width = "2000px")
更新
另一个 hacky 但 "real" 的解决方案是强制单元格显示为 inline-block
csd %>%
kable('html', digits = 2) %>%
column_spec(1, bold = T, width = "2600em; display: inline-block;") %>%
kable_styling(bootstrap_options = c("striped", "hover"))
更新
display: inline-block
现在默认包含在 kableExtra(开发版本)中。
如果我们默认设置 display: inline-block;
,header 行的 table 列将无法自动调整其宽度。当 table 又小又紧时,它会破坏 column_spec。因此,我从默认值中删除了这一行。如果需要强行设置宽度。您可以随时使用我上面提供的方法。
我正在用 R markdown 创建一个 html 文档,其中有一些 tables。在 table 的一列有字符值的情况下,如何确保该列足够宽以包含整个字符串而不换行?我尝试在下面使用 kableExtra
,但似乎 column_spec
的 width
参数没有被使用,即使 bold
参数是。
library(data.table)
csd <- fread(' Oct-17 Sep-17 Aug-17 Jul-17 Jun-17 May-17 Apr-17 Mar-17 Feb-17 Jan-17 Dec-16 Nov-16 Oct-16 Sep-16 2017 YTD 2016 YTD 2015 YTD
V1
V2 71,687 74,492 72,772 74,785 77,084 72,819 85,367 77,403 85,131 81,585 80,186 89,810 92,871 691,540 1,141,589 1,207,433
V3 22,788 22,355 23,093 23,239 23,821 23,005 25,883 22,168 24,812 23,715 22,708 28,128 29,366 211,164 353,006 411,659
V4 #DIV/0! 31.8% 30.0% 31.7% 31.1% 30.9% 31.6% 30.3% 28.6% 29.1% 29.1% 28.3% 31.3% 31.6% 30.5% 30.9% 34.1%
Some long variable name 30,047 31,910 30,046 31,766 33,455 30,913 37,524 33,683 37,589 36,571 35,590 44,447 44,295 296,933 516,597 528,305
V5 2.89% 1.83% 1.55% 1.97% 2.85% 1.37% 4.95% 5.54% 3.45% 3.12% 1.92% 2.65% 1.69% 3.01% 2.04% 0.61%
V6 867 583 465 626 952 422 1,857 1,866 1,298 1,140 682 1,179 748 8,936 10,539 3,201
V7 29,180 31,327 29,581 31,140 32,503 30,491 35,667 31,817 36,291 35,431 34,908 43,268 43,547 287,997 506,058 525,104
V8 0:23 0:15 0:10 0:20 0:29 0:14 0:53 1:03 0:33 0:24 0:20 0:25 0:17 0:29 0:21 0:06
V9 4:53 4:44 4:46 5:00 5:01 5:05 5:01 5:05 5:01 4:57 5:01 4:49 4:52 4:57 4:47 4:11
V10 86% 91% 94% 89% 83% 91% 78% 72% 81% 86% 89% 85% 92% 85% 89% 94%
V11 99.05% 98.20% 96.40% 97.25% 97.80% 96.50% 95.55% 95.85% 95.65% 96.25% 96.55% 97.75% 97.95% 96.92% 97.33% 98.23%
V12 99.75% 100.00% 99.90% 98.85% 99.00% 98.75% 99.00% 99.55% 99.85% 99.45% 99.20% 97.70% 97.55% 99.41% 98.50% 99.01%
')
csd <- csd[-1,-2]
names(csd)[1] <- 'V0'
words <- c('these','are','some','words','extreme','slightly')
csd[,1] <- replicate(nrow(csd), paste(sample(words, 7, T), collapse = " "))
library(knitr)
library(magrittr)
library(kableExtra)
csd %>%
kable('html', digits = 2) %>%
column_spec(1, bold = T, width = "2600em") %>%
kable_styling(bootstrap_options = c("striped", "hover"))
我认为这更像是一个 HTML/css 问题。当 HTML table 的宽度超过页面宽度时,如果没有必要,它会尝试减少列宽。如果减少 csd
的列数,您将看到 width
选项开始显示效果。
在这种情况下,一种解决方法是使用 scroll_box
函数并为 table 提供更宽的绘图区域。
csd %>%
kable('html', digits = 2) %>%
column_spec(1, bold = T, width = "2600em") %>%
kable_styling(bootstrap_options = c("striped", "hover")) %>%
scroll_box(width = "2000px")
更新
另一个 hacky 但 "real" 的解决方案是强制单元格显示为 inline-block
csd %>%
kable('html', digits = 2) %>%
column_spec(1, bold = T, width = "2600em; display: inline-block;") %>%
kable_styling(bootstrap_options = c("striped", "hover"))
更新
display: inline-block
现在默认包含在 kableExtra(开发版本)中。
如果我们默认设置 display: inline-block;
,header 行的 table 列将无法自动调整其宽度。当 table 又小又紧时,它会破坏 column_spec。因此,我从默认值中删除了这一行。如果需要强行设置宽度。您可以随时使用我上面提供的方法。