2015-07-15 2 views
3

Используя knitr и Rstudio, я пытаюсь напечатать DataFrame для HTML или Word, так что ведущие пробелы в versicolor будут толкать versicolor вправо.Печать таблицы HTML или Word в knitr, чтобы соблюдались пробелы в строках.

#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")) 

я получаю это: enter image description here

... или это: enter image description here

Но я , попробовав, чтобы получить следующее: enter image description here

+1

Внутри функции kable вы увидите строку 'x = gsub ("^\\ s * | \\ s * $ "," ", x)', я думаю, именно поэтому он удаляет все ведущие и конечные пробелы. Возможно, измените код и сделайте пользовательскую функцию kable. – zx8754

+0

Вы можете выровнять столбцы, но не уникальные ячейки с [Уценкой Pandoc] (http://pandoc.org/README.html#tables). – daroczig

+3

@ zx8754 Даже если я не обрезаю пробелы, они все равно не будут отображаться в таблице, так как ведущие/конечные пробелы не имеют особого значения в таблицах Markdown и будут игнорироваться. Даже если они не игнорируются в Markdown, они по-прежнему будут игнорироваться в HTML по умолчанию (последовательные пробелы будут рассматриваться как одно пространство). Поэтому я думаю, что решение Шарона ниже должно быть правильным. –

ответ

2

Если вы готовы сбросить с некоторым 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>" 

получит вы слева пространство-отступы.

Последнее может быть даже чище программно (вставив кратные # в padding-left.

3

Вы можете попробовать добавить

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

перед созданием таблицы, которая изменит все пробелы перед лишай в HTML, не -переменные пробелы.

+0

, который изменит _all_ пробелы на ' ', а не только на начало (требуется регулярное выражение). неразрывные разрывы линий разрыва в конце линии. он не встанет. – hrbrmstr

+0

Не уверен, что что-то не так со всеми пробелами в имени вида для отображения в таблице, имеющем только  , если это не интерактивная таблица, где вы выполняете поиск/сортировку? – Sharon

1

Отделите ведущие пробелы от заднего текста одним 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 
) 

 Смежные вопросы

  • Нет связанных вопросов^_^