Un marco de datos puede contener valores repetidos o faltantes. Cada columna puede contener cualquier número de instancias duplicadas o repetidas de la misma variable. Las estadísticas y el análisis de datos se basan principalmente en la tarea de calcular la frecuencia o el recuento del número de instancias que contiene una variable particular dentro de cada columna. En este artículo, vamos a ver cómo encontrar la frecuencia de una variable por columna en Dataframe en lenguaje de programación R.
Método 1: Usar el paquete plyr
El paquete plyr se utiliza preferentemente para experimentar con los datos, es decir, crear, modificar y borrar las columnas del marco de datos, sometiéndolas a múltiples condiciones y funciones definidas por el usuario. Se puede descargar y cargar en el espacio de trabajo con el siguiente comando:
install.packages("lpyr")
El método ldply() de este paquete se usa para aplicar una función predefinida sobre cada elemento de una lista y luego combinar los resultados en un marco de datos. Este método se puede utilizar para calcular la frecuencia de la variable que pertenece a la clase de tipo entero, carácter o factor.
Sintaxis: ldply(datos, diversión = NULL)
Argumentos:
data – Los datos sobre los cuales aplicar
fun – La función que se va a aplicar
En este método, la función sum() se aplica como una función sobre los elementos de cada columna que pertenecen al marco de datos. La función da como resultado la suma del número de veces que aparece un valor especificado en particular dentro de la columna. La función se aplica individualmente sobre cada columna. La salida devuelta tiene la forma de un marco de datos donde la primera columna proporciona los nombres de columna asignados al marco de datos y la segunda columna muestra el número total de ocurrencias de la variable especificada en esa columna.
Código:
R
library ('plyr') set.seed(1) # creating a data frame data_table <- data.frame(col1 = sample(letters[1:3], 8, replace = TRUE) , col2 = sample(letters[1:3], 8, replace = TRUE), col3 = sample(letters[1:3], 8, replace = TRUE), col4 = sample(letters[1:3], 8, replace = TRUE)) print ("Original DataFrame") print (data_table) print ("Count of value per column") # count number of c in each column ldply(data_table, function(c) sum(c =="a"))
Producción:
[1] "Original DataFrame" col1 col2 col3 col4 1 a b b a 2 c c b b 3 a c c a 4 b a a a 5 a a c b 6 c a a b 7 c b a b 8 b b a a [1] "Count of value per column" .id V1 1 col1 3 2 col2 3 3 col3 4 4 col4 4
El método también se puede utilizar para calcular la frecuencia de un vector de valores. La función se define de tal manera que valida la ocurrencia de un elemento dentro de un vector usando el operador %in%. La suma de las ocurrencias VERDADERAS dentro de cada columna se devuelve como los recuentos.
valor %in% vec
Código:
R
library ('plyr') set.seed(1) # creating a data frame data_table <- data.frame(col1 = sample(letters[1:3], 8, replace = TRUE) , col2 = sample(letters[1:3], 8, replace = TRUE), col3 = sample(letters[1:3], 8, replace = TRUE), col4 = sample(letters[1:3], 8, replace = TRUE)) print ("Original DataFrame") print (data_table) print ("Count of value per column") ldply(data_table, function(c) sum(c %in% vec))
Producción:
[1] "Original DataFrame" col1 col2 col3 col4 1 a b b a 2 c c b b 3 a c c a 4 b a a a 5 a a c b 6 c a a b 7 c b a b 8 b b a a [1] "Count of value per column" .id V1 1 col1 5 2 col2 6 3 col3 6 4 col4 8
Método 2: Usar el método sapply()
El método sapply(), que se utiliza para calcular la frecuencia de aparición de una variable dentro de cada columna del marco de datos. El método sapply() se utiliza para aplicar funciones sobre vectores o listas y devolver resultados basados en estos cálculos.
sapply (df , FUN)
En este caso, FUN es una función definida por el usuario que inicialmente calculó el número de niveles dentro de las celdas completas del marco de datos. Esto se hace mediante la aplicación de los métodos unlist() que se utilizan para convertir un marco de datos en una lista anidada. A esto le sigue la aplicación de unique() que extrae solo los valores de variables únicos contenidos en el marco de datos.
unique (list)
El vector obtenido como resultado del método unique() se convierte explícitamente en un objeto de tipo factor mediante el método factor(), donde los niveles son los valores únicos encontrados. Por lo tanto, todos los componentes se asignan a niveles dentro de este vector.
factor (vec)
Al final, se aplica el método table(). 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, .. )
El resultado es un marco de datos con encabezados de fila como valores únicos del marco de datos y encabezados de columna como los nombres de columna del marco de datos original, donde cada valor de celda indica el número de ocurrencias de esa variable de encabezado de fila en la columna respectiva.
Código:
R
set.seed(1) # creating a data frame data_table <- data.frame(col1 = sample(letters[1:3], 8, replace = TRUE) , col2 = sample(letters[1:3], 8, replace = TRUE), col3 = sample(letters[1:3], 8, replace = TRUE), col4 = sample(letters[1:3], 8, replace = TRUE)) print ("Original DataFrame") print (data_table) # compute unique levels in data frame lvls <- unique(unlist(data_table)) # apply the summation per value freq <- sapply(data_table, function(x) table(factor(x, levels = lvls, ordered = TRUE))) print ("Count of variables per column") print (freq)
Producción:
[1] "Original DataFrame" col1 col2 col3 col4 1 a b b a 2 c c b b 3 a c c a 4 b a a a 5 a a c b 6 c a a b 7 c b a b 8 b b a a [1] "Count of variables per column" col1 col2 col3 col4 a 3 3 4 4 c 3 2 2 0 b 2 3 2 4