¿Cómo crear una tabla de frecuencia para datos categóricos en R?

En este artículo, veremos cómo crear una tabla de frecuencia para datos categóricos en el lenguaje de programación R.

Método 1: Usar el método table()

Las tablas en R se utilizan para organizar y resumir mejor las variables categóricas. El método table() toma los factores de clasificación cruzada que pertenecen a un vector para construir una tabla de contingencia de los conteos en cada combinación de niveles de factores. Una tabla de contingencia es básicamente una tabulación de los recuentos y/o porcentajes de múltiples variables. Excluye el conteo de cualquier valor faltante de la variable de factor suministrada al método. La salida devuelta tiene la forma de una tabla. Este método se puede utilizar para la tabulación cruzada y el análisis estadístico.

table (fac-vec, .. )

Se puede convertir a un marco de datos utilizando el método as.data.frame() que devuelve la salida en forma de una estructura tabular organizada en dos columnas, la primera que contiene la variable del factor de entrada y la segunda, los recuentos de las variables correspondientes. , designado por «Freq». 

as.data.frame(table)

En caso de que se especifique un solo argumento, el número de filas en el marco de datos resultante es equivalente al número de niveles únicos del factor. El método rep() también se usa para repetir el primer argumento n número de veces. 

Código:

R

# creating a factor vector
vec <- factor(c(letters[1 : 12], 
                letters[8 : 24],
                letters[4 : 6]))
  
# replicate the vector 2 times
fac_vec <- rep(vec , 2)
  
# generating frequency table of 
# the factor vector
freq <- table(fac_vec)
print ("Frequency DataFrame")
  
# converting the table into dataframe
freq_df <- as.data.frame(freq)
print (freq_df)

Producción:

[1] "Frequency DataFrame"
   fac_vec Freq
1        a    2
2        b    2
3        c    2
4        d    4
5        e    4
6        f    4
7        g    2
8        h    4
9        i    4
10       j    4
11       k    4
12       l    4
13       m    2
14       n    2
15       o    2
16       p    2
17       q    2
18       r    2
19       s    2
20       t    2
21       u    2
22       v    2
23       w    2
24       x    2

El método table() puede tomar varios argumentos como entrada y, como resultado, se devuelve un marco de datos de todas las combinaciones únicas posibles. Cada valor del primer argumento se asigna al valor del segundo argumento y se devuelve la frecuencia de esta combinación. 

R

set.seed(1)  
  
# creating a dataframe
data_frame = data.frame(  
    "col1" =  sample(1:2, 8, replace = TRUE) ,
    "col2" = sample(letters[1:3], 8, replace = TRUE)
)
  
print ("Data Frame")
print (data_frame)
  
# generating frequency table of the
# factor vector
freq <- table(data_frame$col1, data_frame$col2)
print ("Frequency DataFrame")
  
# converting the table into dataframe
freq_df <- as.data.frame(freq)
print (freq_df)

Producción:

[1] "Data Frame"
  col1 col2
1    1    b
2    2    b
3    1    c
4    1    c
5    2    a
6    1    a
7    1    a
8    1    b
[1] "Frequency DataFrame"
  Var1 Var2 Freq
1    1    a    2
2    2    a    1
3    1    b    2
4    2    b    1
5    1    c    2
6    2    c    0

El siguiente programa ilustra el concepto de calcular la distribución de frecuencias sobre un gran conjunto de datos y visualizarlo:

R

library(data.table)
library("ggplot2")
  
# importing the dataset
file <- fread('ch11b.dat')
print ("Dataset 5 rows")
head(file)
  
data <- as.data.frame(file)
freq <- table(data$V5)
print ("Frequency count of column V5")
print (freq)
  
# re-order levels
compute <- function(x) {
  freq <- table(x)
  factor(x, levels = names(sort(freq)))
}
  
# plotting the data
ggplot(data, aes(x = compute(`V5`))) +
  geom_bar() +
  xlab("Gender") 

Producción:

[1] "Dataset 5 rows" 
V1  V2   V3    V4 V5 
1:  1 307  930 36.58  0 
2:  2 307  940 36.73  0 
3:  3 307  950 36.93  0 
4:  4 307 1000 37.15  0 
5:  5 307 1010 37.23  0 
6:  6 307 1020 37.24  0 
[1] "Frequency count of column V5" 
0  1  
38 62 

Distribución de frecuencias sobre la columna V5

Método 2: Usando el método count()

El paquete «plyr» se usa para la manipulación y modificación de datos, que se puede instalar en el espacio de trabajo usando:

install.packages("plyr")

El método count() en el paquete plyr se usa para mantener un conteo de frecuencia de las variables categóricas encontradas. La llamada al método es equivalente a as.data.frame(table(x)). Sin embargo, no incluye combinaciones con cuentas cero. Este método se considera mejor que el método table() porque es más rápido y devuelve la salida en forma de marco de datos, con encabezados directos para filas y columnas. 

count( fac-vec, .. )

Código:

R

# importing required libraries
library("plyr")
  
# creating a factor vector
vec <- factor(c(letters[1:12], 
                letters[8:24], 
                letters[4:6]))
  
# replicate the vector 2 times
fac_vec <- rep(vec , 2)
  
# generating frequency table of the 
# factor vector
freq <- count(fac_vec)
print ("Frequency DataFrame")
print (freq)

Producción

[1] "Frequency DataFrame"
         x Freq
1        a    2
2        b    2
3        c    2
4        d    4
5        e    4
6        f    4
7        g    2
8        h    4
9        i    4
10       j    4
11       k    4
12       l    4
13       m    2
14       n    2
15       o    2
16       p    2
17       q    2
18       r    2
19       s    2
20       t    2
21       u    2
22       v    2
23       w    2
24       x    2

El siguiente fragmento de código ilustra el uso del método table() en conjuntos de datos muy grandes de la potencia de 10 5 elementos divididos en dos categorías Masculino y Femenino: 

R

# creating a factor vector
fac_vec <- factor(sample(c("Male", "Female"),
                         100000 , replace = TRUE))
  
# generating frequency table of the factor vector
freq <- count(fac_vec)
print ("Frequency DataFrame")
  
# converting the table into data frame
freq_df <- as.data.frame(freq)
print (freq_df)

Producción:

[1] "Frequency DataFrame" 
        x  freq
 1 Female 49936
 
2   Male 50064

Publicación traducida automáticamente

Artículo escrito por yippeee25 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *