Как установить пробелы в именах столбцов таблицы или фрейма данных с помощью xtable

Поэтому я хочу использовать пробелы между словами в именах столбцов фрейма данных и распечатать фрейм данных в формате pdf в латексном формате. Однако, когда я использую xtable() для этого, имена столбцов объединяются.

Например, я бы хотел, чтобы заголовок второго столбца выглядел как «Categoria de Referencia». Вместо этого я получаю:

введите здесь описание изображения

Кто-нибудь знает, как это уладить? Вот фрагмент R, который переводит фрейм данных в латекс:

tab<-xtable(dat,caption="Efectos de las Variables sobre la Probabilidad de Conversión",digits=2)
print(tab,latex.environments = "center",include.rownames=FALSE)

Вот код, который генерирует кадр данных:

structure(list(Variable = structure(c(4L, 3L, 3L, 3L, 3L, 3L, 
2L, 1L), .Label = c("App", "Clicker", "País", "Uso"), class = "factor"), 
    Categoría.de.Referencia = structure(c(3L, 1L, 1L, 1L, 1L, 
    1L, 2L, 4L), .Label = c("Brasil", "Clicker", "No Acaba Unidad", 
    "No Usa App"), class = "factor"), Categoría.Considerada = structure(c(1L, 
    2L, 3L, 4L, 5L, 7L, 6L, 8L), .Label = c("Acaba la Unidad", 
    "España", "Francia", "ITalia", "Méjico", "No Cliker", "Otros Países", 
    "Usa App"), class = "factor"), Variación = structure(c(8L, 
    4L, 5L, 6L, 1L, 2L, 3L, 7L), .Label = c("-0.19%", "-0.46%", 
    "-2.32%", "0.31%", "0.46%", "0.7%", "1.15%", "2.08%"), class = "factor")), .Names = c("Variable", 
"Categoría.de.Referencia", "Categoría.Considerada", "Variación"
), row.names = c(NA, -8L), class = "data.frame")

person intael    schedule 20.08.2015    source источник
comment
@MichaelChirico готово, я отредактировал OP.   -  person intael    schedule 20.08.2015


Ответы (1)


Лучше всего, вероятно, использовать параметры sanitize.*, например:

> print.xtable(xtable(dat),include.rownames=F,
               sanitize.colnames.function=function(x)gsub("\\."," ",x))

% latex table generated in R 3.2.1 by xtable 1.7-4 package
% Thu Aug 20 10:47:54 2015
\begin{table}[ht]
\centering
\begin{tabular}{llll}
  \hline
Variable & Categoría de Referencia & Categoría Considerada & Variación \\ 
  \hline
Uso & No Acaba Unidad & Acaba la Unidad & 2.08\% \\ 
  País & Brasil & España & 0.31\% \\ 
  País & Brasil & Francia & 0.46\% \\ 
  País & Brasil & ITalia & 0.7\% \\ 
  País & Brasil & Méjico & -0.19\% \\ 
  País & Brasil & Otros Países & -0.46\% \\ 
  Clicker & Clicker & No Cliker & -2.32\% \\ 
  App & No Usa App & Usa App & 1.15\% \\ 
   \hline
\end{tabular}
\end{table}

От ?print.xtable:

sanitize.text.function Все нечисловые вводы (кроме имен строк и столбцов) очищаются в попытке удалить символы, которые имеют особое значение для выходного формата. Если sanitize.text.function не NULL (по умолчанию), это должна быть функция, принимающая вектор символов и возвращающая его, и она будет использоваться для очистки вместо внутренней функции по умолчанию.

Это то же самое для sanitize.colnames.function.

Другой вариант на случай, если вы хотите полностью изменить имена (чтобы вы не могли regex проложить себе путь к свободе, как указано выше), — преобразовать dat в матрицу и установить colnames:

datmat<-as.matrix(dat)
colnames(datmat)<-c("Variable","Categoría de Referencia",
                    "Categoría Considerada", "Variación")
print.xtable(xtable(datmat),include.rownames=F)
person MichaelChirico    schedule 20.08.2015