Обзор переменных с xtable в R - PullRequest
12 голосов
/ 05 мая 2011

Мне интересно, возможно ли создать xtable из команды str(x), чтобы получить обзор переменных, которые вы используете.Это было бы хорошей возможностью познакомить кого-то с набором данных, но раздражает создание его самостоятельно.Итак, что я пытался сделать, это сделать xtable следующим образом:

str(cars)
require(xtable)
xtable(str(cars))

набор данных автомобилей дан от R. К сожалению, xtable не дает латексный код для str().Возможно ли перехитрить R здесь?Вот основные команды, которые xtable поймет:

methods(xtable)

Есть идеи?

Ответы [ 3 ]

16 голосов
/ 05 мая 2011

Еще один пакет, на который стоит посмотреть reporttools. Вот небольшой фрагмент кода, иллюстрирующий его использование в наборе данных tips из пакета reshape. Оба итоговых оператора создают латексный код, который можно скопировать, вставить в документ или использовать для плетения.

library(reporttools)
data(tips, package = 'reshape')

# summarize numeric variables
tableContinuous(tips[,sapply(tips, is.numeric)])

# summarize non-numeric variables
tableNominal(tips[,!sapply(tips, is.numeric)])

EDIT. Если вы действительно ДОЛЖНЫ использовать str, то вот один из способов сделать это

str_cars = capture.output(str(cars))
xtable(data.frame(str_cars))

ВЫХОД ИЗ ОТЧЕТОВ: enter image description hereenter image description here

14 голосов
/ 05 мая 2011

Если вы захотите потратить некоторое время на изучение работы пакета Hmisc , вы скоро обнаружите, что существует множество утилит, которые облегчают такие задачи.В частности, метод contents() облегчает описание data.frame, сообщая

имена, метки (если есть), единицы (если есть), количество уровней фактора (если есть), коэффициентуровни, класс, режим хранения и количество NA

Метки и единицы могут быть связаны (внутренне, как attributes) с каждой переменной.Существуют связанные методы print, html и latex для просмотра и экспорта.

Еще одна приятная функция - это функция describe(), как показано ниже:

> describe(cars)
cars 

 2  Variables      50  Observations
--------------------------------------------------------------------------------
speed 
      n missing  unique    Mean     .05     .10     .25     .50     .75     .90 
     50       0      19    15.4     7.0     8.9    12.0    15.0    19.0    23.1 
    .95 
   24.0 

          4 7 8 9 10 11 12 13 14 15 16 17 18 19 20 22 23 24 25
Frequency 2 2 1 1  3  2  4  4  4  3  2  3  4  3  5  1  1  4  1
%         4 4 2 2  6  4  8  8  8  6  4  6  8  6 10  2  2  8  2
--------------------------------------------------------------------------------
dist 
      n missing  unique    Mean     .05     .10     .25     .50     .75     .90 
     50       0      35   42.98   10.00   15.80   26.00   36.00   56.00   80.40 
    .95 
  88.85 

lowest :   2   4  10  14  16, highest:  84  85  92  93 120 
--------------------------------------------------------------------------------
9 голосов
/ 05 мая 2011

Поскольку xtable обеспечивает лучший результат при использовании с объектами data.frames и matrix, я бы порекомендовал что-то вроде этого:

library(xtable)
library(plyr)
dtf <- sapply(mtcars, each(min, max, mean, sd, var, median, IQR))
xtable(dtf)
% latex table generated in R 2.12.2 by xtable 1.5-6 package                                                                  
% Thu May  5 19:40:08 2011                                                                                                   
\begin{table}[ht]                                                                                                            
\begin{center}                                                                                                               
\begin{tabular}{rrrrrrrrrrrr}                                                                                                
  \hline                                                                                                                     
 & mpg & cyl & disp & hp & drat & wt & qsec & vs & am & gear & carb \\                                                       
  \hline                                                                                                                     
min & 10.40 & 4.00 & 71.10 & 52.00 & 2.76 & 1.51 & 14.50 & 0.00 & 0.00 & 3.00 & 1.00 \\                                      
  max & 33.90 & 8.00 & 472.00 & 335.00 & 4.93 & 5.42 & 22.90 & 1.00 & 1.00 & 5.00 & 8.00 \\                                  
  mean & 20.09 & 6.19 & 230.72 & 146.69 & 3.60 & 3.22 & 17.85 & 0.44 & 0.41 & 3.69 & 2.81 \\                                 
  sd & 6.03 & 1.79 & 123.94 & 68.56 & 0.53 & 0.98 & 1.79 & 0.50 & 0.50 & 0.74 & 1.62 \\                                      
  var & 36.32 & 3.19 & 15360.80 & 4700.87 & 0.29 & 0.96 & 3.19 & 0.25 & 0.25 & 0.54 & 2.61 \\                                
  median & 19.20 & 6.00 & 196.30 & 123.00 & 3.70 & 3.33 & 17.71 & 0.00 & 0.00 & 4.00 & 2.00 \\                               
  IQR & 7.38 & 4.00 & 205.18 & 83.50 & 0.84 & 1.03 & 2.01 & 1.00 & 1.00 & 1.00 & 2.00 \\                                     
   \hline                                                                                                                    
\end{tabular}                                                                                                                
\end{center}                                                                                                                 
\end{table} 

Извините за длительный вывод.Вы можете получить PDF здесь .each - очень универсальная функция, так как вы можете легко определить пользовательскую сводку.Кроме того, str возвращает вывод в stdout, поэтому вы не можете получить сводку по конкретным переменным.В этом случае sapply упростит результат, получив matrix вместо data.frame.Но это не так проблематично, верно?

...