在 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(" ", " ", df$Species, fixed=TRUE)
在创建 table 之前,这会将 versicolor 之前的所有空格更改为 HTML 不间断空格。
用一个 gsub
将前导空格与尾随文本分开。然后,用第二个 gsub
全局替换这些空格。最后,将两部分与 paste
.
合并
单线:
paste0(gsub('\s', ' ', gsub('^(\s*)\S.*', '\1', df$Species)), gsub('^\s*(\S.*)', '\1', df$Species))
如果df$Species <- " versicolor"
,结果是:" versicolor"
如果df$Species <- " one two three"
,结果是:" one two three"
或者,为清楚起见重新格式化:
x <- df$Species
paste0( # Combine edited text
gsub('\s', ' ', # 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))
使用 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(" ", " ", df$Species, fixed=TRUE)
在创建 table 之前,这会将 versicolor 之前的所有空格更改为 HTML 不间断空格。
用一个 gsub
将前导空格与尾随文本分开。然后,用第二个 gsub
全局替换这些空格。最后,将两部分与 paste
.
单线:
paste0(gsub('\s', ' ', gsub('^(\s*)\S.*', '\1', df$Species)), gsub('^\s*(\S.*)', '\1', df$Species))
如果df$Species <- " versicolor"
,结果是:" versicolor"
如果df$Species <- " one two three"
,结果是:" one two three"
或者,为清楚起见重新格式化:
x <- df$Species
paste0( # Combine edited text
gsub('\s', ' ', # 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))