在 knitr 中打印 HTML 或 Word table 以便尊重字符串中的空格

Print HTML or Word table in knitr so that whitespaces in strings are respected

使用 knitr 和 Rstudio,我正在尝试将数据框打印到 HTML 或 Word,以便杂色中的前导空格会将杂色推到右边。

#data
library(knitr ) 
library(xtable)

df <- iris[c(1,51),c(5,1)]
df$Species  <- as.character(df$Species)
df$Species[ df$Species=="versicolor"]  <- "         versicolor"

正在尝试 kable() 的不同组合...

#table
kable(  df)
kable(  df, right = FALSE,align = c("l", "l" ) )
kable(  df, right = FALSE,align = c("r", "l" ) )

我明白了:

...或者这个:

但我正在尝试得到这个:

如果你愿意与一些HTML:

df$Species[ df$Species=="versicolor"]  <- 
  "<code style='background:white'>         </code>versicolor"` will get you something like you want

df$Species[ df$Species=="versicolor"]  <- 
  "<span style='padding-left:30px'>         versicolor</span>"

会让你离开-space-填充。

后者在编程上什至可能更清晰(在 padding-left.

中插入 # 的倍数

您可以尝试添加

df$Species <- gsub(" ", "&nbsp;", df$Species, fixed=TRUE)

在创建 table 之前,这会将 versicolor 之前的所有空格更改为 HTML 不间断空格。

用一个 gsub 将前导空格与尾随文本分开。然后,用第二个 gsub 全局替换这些空格。最后,将两部分与 paste.

合并

单线:

paste0(gsub('\s', '&nbsp;', gsub('^(\s*)\S.*', '\1', df$Species)), gsub('^\s*(\S.*)', '\1', df$Species))

如果df$Species <- " versicolor",结果是:"&nbsp;&nbsp;&nbsp;versicolor"

如果df$Species <- " one two three",结果是:"&nbsp;&nbsp;&nbsp;one two three"

或者,为清楚起见重新格式化:

x <- df$Species

paste0(                                 # Combine edited text
    gsub('\s', '&nbsp;',               # Replace leading spaces
        gsub('^(\s*)\S.*', '\1', x)  # Extract leading spaces
    ), 
    gsub('^\s*(\S.*)', '\1', x)      # Extract trailing text
)

使用 kableExtra 包怎么样?请在此处查看 "Row indentation":

https://cran.r-project.org/web/packages/kableExtra/vignettes/awesome_table_in_html.html

基本上,

library(kableExtra)
dt <- mtcars[1:5, 1:6]
kable(dt) %>%
  kable_styling("striped", full_width = F) %>%
  add_indent(c(1, 3, 5))