2014-02-08 4 views
0

У меня есть блок данных с 2 строками (до/после обработки) и 11 столбцов, которые я хочу отображать в виде таблицы 11x2. Ниже делает работу хорошо:Транспонирование xtable при форматировании числа цифр

print(xtable(t(df))) 

Однако, я не могу понять, как контролировать количество цифр, а также выполнить транспонирование. Возможна ли постконтактная транспозиция?

df <- xtable(df) 
digits(df) <- c(0,0,0,1,0,1,2,0,1,0,0,2) 
t(df) # Does not work; is a post-xtable transpose possible? 

Я также попытался перенося перед созданием xtable, затем изменить цифры для строк в отдельности, но не мог получить, чтобы работать либо, т.е.

df <-xtable(t(df)) # works as intended 
digits(df[10,]) <- c(0,1,1) # no error, but does nothing 

Общая задача состоит в том, что в финальной таблице мне нужно другое число десятичных знаков по строкам в одном столбце. Это заставляет меня думать, что, вероятно, потребуется некоторая версия первого подхода, чтобы можно было использовать стандартные элементы управления xtable digit (то есть, Control number of decimal places on xtable output in R)

+0

в таких случаях, я конвертировать все для символьных векторов, строка за строкой, где я могу контролировать по количеству цифр –

+0

я бы изменить представление чисел и транспонировать дО принуждение к xtable. Попробуйте использовать 'round ' –

+0

@BrandonBertelsen есть способ сделать это все за один шаг, как есть с' digits() '? – Bryan

ответ

2

Одна из проблем заключается в том, что ваш аргумент «цифр» длится 12 элементов. Взлет ведущих «0» позволяет предупреждениям быть уменьшена:

df <- as.data.frame(matrix(rnorm(22), nrow=2)) 
print(xtable(t(mapply("format", df, digits=c(0,0,1,0,1,2,0,1,0,0,2))))) 

% latex table generated in R 3.0.2 by xtable 1.7-1 package 
% Sat Feb 8 11:37:06 2014 
\begin{table}[ht] 
\centering 
\begin{tabular}{rll} 
    \hline 
& 1 & 2 \\ 
    \hline 
V1 & 0 & 0 \\ 
    V2 & 0 & 1 \\ 
    V3 & 2.1 & -0.5 \\ 
    V4 & -2 & 1 \\ 
    V5 & -0.7 & -0.7 \\ 
    V6 & 1.03 & -0.28 \\ 
    V7 & -1 & 0 \\ 
    V8 & -0.139 & 0.006 \\ 
    V9 & 0 & -0 \\ 
    V10 & 1 & -0 \\ 
    V11 & 0.33 & 1.10 \\ 
    \hline 
\end{tabular} 
\end{table} 

Функция транспонирования матриц и data.frames, кажется, для обеспечения однородности столбца ширины цифр (или, возможно, это их методы печати

? Вот очень запутано усилие:.

capture.output(apply(cbind(t(df), digits), 1, function(x) 
              cat(c(round(x[1:2], x[3]) ,"\n"))) ) 
[1] "0 0 "  "0 1 "  "2.1 -0.5 " "-2 1 "  "-0.7 -0.7 " 
[6] "1.03 -0.28 " "-1 0 "  "-0.1 0 "  "0 0 "  "1 0 "  
[11] "0.33 1.1 " "NULL" 
+0

Спасибо, это трюк. Интересно, однако, что аргумент 'digits' выглядит по-другому в вашем примере, чем для xxtable: для« format »он равен суммарному количеству нужных цифр, тогда как для xxtable оно равно желаемому числу цифр справа от десятичной точка. – Bryan

+0

Я думаю, что это дает минимальное количество значимых цифр на основе строк. –