Переопределить имена строк, переименовывая дубликаты с помощью xtable

Я хотел бы, чтобы xtable НЕ переопределял мои повторяющиеся записи имени строки. Рассмотрим следующий MWE:

> require(xtable)
> foo <- matrix(0, 2,2)
> rownames(foo) = rep("bar", 2)
> foo
    [,1] [,2]
bar    0    0
bar    0    0
> xtable(foo)
% latex table generated in R 2.15.0 by xtable 1.7-0 package
% Fri Jun 22 13:59:36 2012
\begin{table}[ht]
\begin{center}
\begin{tabular}{rrr}
  \hline
 & 1 & 2 \\ 
  \hline
1 & 0.00 & 0.00 \\ 
  2 & 0.00 & 0.00 \\ 
   \hline
\end{tabular}
\end{center}
\end{table}
Warning message:
In data.row.names(row.names, rowsi, i) :
  some row.names duplicated: 2 --> row.names NOT used

Вместо того, чтобы имена строк были 1 и 2, я хочу, чтобы они были моими исходными «баром» и «баром». Есть ли способ переопределить схему замены дубликатов xtable?


person Christopher Aden    schedule 22.06.2012    source источник
comment
Это не xtable. Выполнить data.frame(foo). Используйте фрейм данных, добавьте имена строк в качестве первого столбца и скажите xtable, чтобы подавить настоящие имена строк.   -  person joran    schedule 23.06.2012
comment
Это креативное решение! Пожалуйста, отправьте это как ответ, так как это помогло.   -  person Christopher Aden    schedule 23.06.2012


Ответы (1)


Вот решение xtable (в очень компактной форме):

> print(xtable(data.frame(row = rownames(foo),data.frame(foo))),include.rownames = FALSE)
% latex table generated in R 2.14.2 by xtable 1.6-0 package
% Fri Jun 22 14:24:59 2012
\begin{table}[ht]
\begin{center}
\begin{tabular}{lrr}
  \hline
row & X1 & X2 \\ 
  \hline
bar & 0.00 & 0.00 \\ 
  bar & 0.00 & 0.00 \\ 
   \hline
\end{tabular}
\end{center}
\end{table}

Это все равно приведет к предупреждению, и будет сложно правильно подобрать заголовки столбцов. Другой вариант — использовать latex из пакета Hmisc, который немного более гибкий (но и более сложный; вы можете отключить многоколоночный материал):

library(Hmisc)
> latex(foo,file = "")
% latex.default(foo, file = "") 
%
\begin{table}[!tbp]
\begin{center}
\begin{tabular}{lrr}
\hline\hline
\multicolumn{1}{l}{foo}&\multicolumn{1}{c}{}&\multicolumn{1}{c}{}\tabularnewline
\hline
bar&$0$&$0$\tabularnewline
bar&$0$&$0$\tabularnewline
\hline
\end{tabular}
\end{center}
\end{table}

Извините за краткий комментарий. Я в это время держала на руках ребенка.

person joran    schedule 22.06.2012
comment
Ваше первое предложение с использованием data.frame и столбца с именами строк дает мне желаемый результат. Не нужно извиняться за комментарий — он дал достаточно подсказки, чтобы получить желаемый результат! - person Christopher Aden; 23.06.2012