2012-06-22 14 views
26

Soy nuevo con R. Necesito generar una tabla de frecuencia simple (como en libros) con frecuencia acumulada y frecuencia relativa.Cómo generar una tabla de frecuencias en R con frecuencia acumulada y frecuencia relativa

por lo que quiero generar a partir de algunos datos simples como

> x 
[1] 17 17 17 17 17 17 17 17 16 16 16 16 16 18 18 18 10 12 17 17 17 17 17 17 17 17 16 16 16 16 16 18 18 18 10 
[36] 12 15 19 20 22 20 19 19 19 

una tabla como:

  frequency cumulative relative 
(9.99,11.7] 2   2  0.04545455 
(11.7,13.4] 2   4  0.04545455 
(13.4,15.1] 1   5  0.02272727 
(15.1,16.9] 10   15  0.22727273 
(16.9,18.6] 22   37  0.50000000 
(18.6,20.3] 6   43  0.13636364 
(20.3,22]  1   44  0.02272727 

Sé que debe ser simple, pero no sé cómo.

me dieron algunos resultados utilizando este código:

factorx <- factor(cut(x, breaks=nclass.Sturges(x))) 
as.matrix(table(factorx)) 

Respuesta

24

estás cerca! Hay algunas funciones que le facilitarán esto, a saber, cumsum() y prop.table(). Así es como probablemente habría juntado esto. Hago algunos datos aleatorios, pero el punto es el mismo:

#Fake data 
x <- sample(10:20, 44, TRUE) 
#Your code 
factorx <- factor(cut(x, breaks=nclass.Sturges(x))) 
#Tabulate and turn into data.frame 
xout <- as.data.frame(table(factorx)) 
#Add cumFreq and proportions 
xout <- transform(xout, cumFreq = cumsum(Freq), relative = prop.table(Freq)) 
#----- 
     factorx Freq cumFreq relative 
1 (9.99,11.4] 11  11 0.25000000 
2 (11.4,12.9] 3  14 0.06818182 
3 (12.9,14.3] 11  25 0.25000000 
4 (14.3,15.7] 2  27 0.04545455 
5 (15.7,17.1] 6  33 0.13636364 
6 (17.1,18.6] 3  36 0.06818182 
7 (18.6,20] 8  44 0.18181818 
+1

también debe dar un tapón a '?? 'función que permite la búsqueda difusa, es decir' 'suma acumulativa" 'lo guiaría en la dirección correcta. – Chase

+1

Funcionó bien, me confundía que la visualización de los datos se realiza como ** marco de datos ** (en lugar de una tabla). El '??' es realmente bueno, pero no soy hablante nativo de inglés, por lo que es difícil buscar ayuda. – eloyesp

+0

@El_Hoy - compare la salida de 'str (as.data.frame (table (sample (1:10, 100, TRUE))))' y 'str (table (sample (1:10, 100, TRUE))) 'para ver la diferencia en la salida. Formatear como datos.el marco simplemente facilita agregar el cumsum y las proporciones. ¡Buena suerte! Mucha información buena aquí en SO y mucha gente a la que le gusta responder preguntas. ¡Aclamaciones! – Chase

19

La funciones de base table, cumsum y prop.table debe llegar hasta allí:

cbind(Freq=table(x), Cumul=cumsum(table(x)), relative=prop.table(table(x))) 
    Freq Cumul relative 
10 2  2 0.04545455 
12 2  4 0.04545455 
15 1  5 0.02272727 
16 10 15 0.22727273 
17 16 31 0.36363636 
18 6 37 0.13636364 
19 4 41 0.09090909 
20 2 43 0.04545455 
22 1 44 0.02272727 

Con cbind y la denominación de las columnas a su gusto esto debería ser bastante fácil para ti en el futuro. El resultado de la función de tabla es una matriz, por lo que este resultado también es una matriz. Si esto se está haciendo en algo grande que sería más eficiente TODO esto:

tbl <- table(x) 
cbind(Freq=tbl, Cumul=cumsum(tbl), relative=prop.table(tbl)) 
12

Si usted está buscando algo pre-envasados, considere la función freq() del paquete descr.

library(descr) 
x = c(sample(10:20, 44, TRUE)) 
freq(x, plot = FALSE) 

o para obtener porcentajes acumulativos, utilice la función ordered()

freq(ordered(x), plot = FALSE) 

Para agregar una columna "frecuencias acumuladas":

tab = as.data.frame(freq(ordered(x), plot = FALSE)) 
CumFreq = cumsum(tab[-dim(tab)[1],]$Frequency) 
tab$CumFreq = c(CumFreq, NA) 
tab 

Si los datos tienen valores perdidos, un porcentaje válido la columna se agrega a la tabla.

x = c(sample(10:20, 44, TRUE), NA, NA) 
freq(ordered(x), plot = FALSE) 
1

Sin embargo, otra posibilidad:

library(SciencesPo) 
    x = c(sample(10:20, 50, TRUE)) 
    freq(x) 
-1

Mi sugerencia es comprobar el paquete agricolae ... comprobarlo:

library(agricolae) 

weight<-c(68, 53, 69.5, 55, 71, 63, 76.5, 65.5, 69, 75, 76, 57, 70.5, 
+ 71.5, 56, 81.5, 69, 59, 67.5, 61, 68, 59.5, 56.5, 73, 
+ 61, 72.5, 71.5, 59.5, 74.5, 63) 

h1<- graph.freq(weight,col="yellow",frequency=1,las=2,xlab="h1") 

print(summary(h1),row.names=FALSE) 
Cuestiones relacionadas