2011-05-05 11 views
12

Me pregunto si es posible crear un xtable desde el comando str(x) para obtener una visión general de las variables que utiliza. Esta sería una buena característica para presentar a alguien al conjunto de datos, pero es molesto crearlo usted mismo. Así whta Probé es hacer una xtable así:Descripción general de variables con xtable en R

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

el conjunto de datos coches se da de R. Por desgracia xtable no da una Latexcode para str(). ¿Es posible aquí R astuto? Estas son las principales comandos que xtable entenderemos:

methods(xtable) 

alguna idea?

+1

'xtable (summary (cars))'? – James

+0

El problema con str es que no da salida.Tal vez 'xtable (cars [1:10,]) ' –

+0

Hey Manoel! Gracias por tus ideas, pero quiero tener una especificación de las variables. Algo así como coche: entero, Marca: factor (BMW, VW, Benz). – user734124

Respuesta

9

Desde xtable proporciona mejores resultados cuando se utiliza con data.frames y matrix objetos, lo recomiendo algo como esto:

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} 

Perdón por la larga producción. Puede tomar PDF here. each es una función muy versátil, ya que puede definir un resumen personalizado bastante fácil. Además, str devuelve la salida a stdout, por lo que no puede recuperar el resumen de variables específicas. En este caso, sapply simplificará el resultado, produciendo matrix en su lugar data.frame. Pero eso no es tan problemático, ¿verdad?

+0

Gracias ¡por tus esfuerzos! ¡Esto es realmente útil para mí al estructurar comandos xtable en el futuro! ¡Pero solo necesito las variables en una columna y los niveles, como se muestra en la figura de arriba! No hay necesidad de ninguna estadística descriptiva :) – user734124

+0

Bueno ... eso es algo completamente diferente. Deberías haber dicho eso. ¿Podría reformular su pregunta para poder abordarla de otra manera? Asegúrese de proporcionar algunos datos ficticios. – aL3xa

14

Si está dispuesto a pasar algún tiempo investigando cómo funciona el paquete Hmisc, pronto descubrirá que hay muchas utilidades que facilitan dichas tareas. En particular, el método contents() facilita la descripción de data.frame informando

nombres, etiquetas (si los hay), unidades (si alguno), el número de niveles de los factores (si hubiera), los niveles de factor, clase , almacenamiento modo, y el número de AN

Etiquetas y unidades se pueden binded (internamente, como attributes) a cada variable. Hay métodos asociados print, html y latex para ver y exportar.

Otra funcionalidad interesante es la función describe(), como se ve a continuación:

> 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 
-------------------------------------------------------------------------------- 
+0

Hola chl! Paquete muy interesante. ¡Probé los comandos que me presentaron y parece que vale la pena dedicar un tiempo a aprender a aplicar! Simplemente muy rápido: traté de usar el comando 'Latex (str (x))' (sé que esto fue solo un intento de noobish) pero parece ser una forma diferente de calcular el código Latex (en comparación con el comando xtable). Solo necesito una breve descripción de las variables, ya que se proporciona con str(). contents() y describe() son mucho mejores que str() para obtener información sobre los datos, ¡pero lo que necesito es un breve resumen! – user734124

16

Otro paquete a tener en cuenta es reporttools. Aquí hay un pequeño fragmento de código para ilustrar su uso en el conjunto de datos tips del paquete reshape. Ambas sentencias resumen producen código de látex que puede copiarse en un documento o utilizarse para tejer.

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. EDIT. Si realmente tiene que usar str, entonces aquí es una manera de hacerlo

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

SALIDA DE REPORTTOOLS: enter image description hereenter image description here

+1

¡Hola Ramnath! Esto es bastante parecido a lo que necesito. ¡Gracias hasta ahora! Lo que realmente me gustaría es fusionar la tabla para valores continuos y valores categóricos. Pero lo que no necesito son las estadísticas descriptivas ... Lo que necesito es estar cerca del comando str() en R básica, pero con una buena apariencia para Latex. Tal vez esto no sea posible y tengo que crear una tabla manuel ... Me pregunto por qué no hay un comando simple, porque a menudo es necesario introducir variables para familiarizar al lector con lo que está tratando :) – user734124

Cuestiones relacionadas