Contar valores no NA por grupo en DataFrame en R

En este artículo, discutiremos cómo contar los valores que no son NA por grupo en el marco de datos en el lenguaje de programación R.

Método 1: usar los métodos group_by() y summarise()

El paquete dplyr se utiliza para realizar simulaciones en los datos realizando manipulaciones y transformaciones. El método group_by() en el lenguaje de programación R se usa para agrupar el marco de datos especificado en R. Se puede usar para categorizar datos según varias funciones agregadas como recuento, mínimo, máximo o suma. 

Sintaxis:

group_by(col-nombre)

Al aplicar el método group_by(), se aplica el método de resumen para calcular un recuento de los valores totales obtenidos de acuerdo con cada grupo. La suma de los valores no nulos se calcula utilizando el nombre de columna designado y el método agregado sum() proporcionado con el método is.na() como argumento. 

Sintaxis:

resume (nuevo-nombre-de-la-columna = sum(is.na (nombre-de-la-columna))

Ambos métodos se aplican para el marco de datos de entrada utilizando el operador de tubería. La salida se devuelve en forma de tibble, con la primera columna compuesta por los argumentos de entrada del método group_by y a la segunda columna se le asigna el nuevo nombre de columna especificado y contiene una suma de los valores de cada columna. 

Ejemplo:

R

# creating a dataframe
data_frame <- data.frame(col1 = sample(6:9, 9 , replace = TRUE),
                        col2 = letters[1:3],
                        col3 = c(1,4,NA,1,NA,NA,2,NA,2))
  
print ("Original DataFrame")
print (data_frame)
  
# grouping data by col1 and giving a total of
# non na values in col3
data_frame %>% group_by(col1) %>% summarise(
  non_na = sum(!is.na(col3)))

Producción

[1] "Original DataFrame"
col1 col2 col3
1    6    a    1
2    8    b    4
3    6    c   NA
4    8    a    1
5    8    b   NA
6    9    c   NA
7    8    a    2
8    7    b   NA
9    6    c    2
# A tibble: 4 x 2    
col1 non_na
  <int>        <int>
1     6            2
2     7            0
3     8            3
4     9            0

Método 2: Usando data.table

La biblioteca data.table en R se usa para realizar cálculos estadísticos y deliberaciones basadas en la organización de datos en estructuras tabulares bien definidas. El método setDT en R se usa para convertir listas (tanto con nombre como sin nombre) y marcos de datos en tablas de datos por referencia. Los métodos similares sum() e is.na() se aplican sobre las columnas del marco de datos en secuencia para obtener el resultado final. El resultado devuelto tiene la forma de una tabla de datos con números de fila seguidos de identificadores de fila seguidos de dos puntos. 

Sintaxis:

setDT(df)[, .(nombre-nueva-columna = sum(!is.na(nombre-nueva-columna))), nombre-columna]

Ejemplo:

R

# importing required libraries
library(data.table)
  
# creating a dataframe
data_frame <- data.frame(col1 = sample(6:9, 9 , replace = TRUE),
                        col2 = letters[1:3],
                        col3 = c(1,4,NA,1,NA,NA,2,NA,2))
  
print ("Original DataFrame")
print (data_frame)
  
# grouping data by col1 and giving a total
# of non na values in col3
mod_df <- setDT(data_frame)[, .(non_na = sum(!is.na(col3))), col1]
print ("Modified DataFrame")
print (mod_df)

Producción

[1] "Original DataFrame"
col1 col2 col3
1    7    a    1
2    6    b    4
3    6    c   NA
4    7    a    1
5    9    b   NA
6    8    c   NA
7    6    a    2
8    8    b   NA
9    8    c    2
[1] "Modified DataFrame"
   col1 non_na
1:    7      2
2:    6      2
3:    9      0
4:    8      1

Método 3: Usando el método agregado

El método agregado en R se usa para crear los subconjuntos producidos a partir del resultado de la división del marco de datos y luego calcula las estadísticas de resumen para cada uno de los grupos devueltos. 

Sintaxis:

agregado (x, datos, DIVERSIÓN)

Parámetro: 

x: el objeto de almacenamiento R.

datos: el marco de datos o la lista para aplicar el método agregado. 

FUN – la función para aplicar a cada uno de los grupos del marco de datos.

El método cbind() en el lenguaje de programación R se usa para producir una concatenación de las columnas producidas como salida. La FUN aplicada es la operación de suma para calcular la suma de los valores no nulos segregados en base a grupos. Los datos son el marco de datos de entrada sobre el que se aplica FUN. 

Ejemplo:

R

# importing required libraries
library(data.table)
  
# creating a dataframe
data_frame <- data.frame(col1 = sample(6:9, 9 , replace = TRUE),
                        col2 = letters[1:3],
                        col3 = c(1,4,NA,1,NA,NA,2,NA,2))
  
print ("Original DataFrame")
print (data_frame)
  
# grouping data by col1 and giving a total 
# of non na values in col3
mod_df <- aggregate(cbind(
  non_na = !is.na(col3))~col1, data_frame, sum)
print ("Modified DataFrame")
print (mod_df)

Producción

[1] "Original DataFrame"
col1 col2 col3
1    7    a    1
2    6    b    4
3    6    c   NA
4    7    a    1
5    9    b   NA
6    8    c   NA
7    6    a    2
8    8    b   NA
9    8    c    2
[1] "Modified DataFrame"
   col1 non_na
1    7      2
2    6      2
3    9      0
4    8      1

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

La biblioteca data.table en R se usa para realizar cálculos estadísticos y deliberaciones basadas en la organización de datos en estructuras tabulares bien definidas. El método table() se utiliza para generar una tabla de contingencia de los recuentos después de calcular la combinación de cada uno de los niveles de los factores. Por lo tanto, se utiliza para realizar la tabulación categórica de los datos. Inicialmente, la columna requerida para verificar los valores de NA se especifica bajo la restricción usando la función is.na(). A continuación, se extraen los valores no nulos y se produce un recuento de ellos utilizando los métodos de indexación de tabla de datos. 

Sintaxis:

is.na (df$col-nombre))

Ejemplo:

R

# importing required libraries
library(data.table)
  
# creating a dataframe
data_frame <- data.frame(col1 = sample(6:9, 9 , replace = TRUE),
                        col2 = letters[1:3],
                        col3 = c(1,4,NA,1,NA,NA,2,NA,2))
print ("Original DataFrame")
print (data_frame)
  
# grouping data by col1 and giving a
# total of non na values in col3
mod_df <- table(data_frame$col1[!is.na(data_frame$col3)])
print ("Modified DataFrame")
print (mod_df)

Producción

[1] "Original DataFrame"
  col1 col2 col3
1    7    a    1
2    9    b    4
3    8    c   NA
4    6    a    1
5    6    b   NA
6    8    c   NA
7    9    a    2
8    9    b   NA
9    8    c    2
[1] "Modified DataFrame"
6 7 8 9  
1 1 1 2 

Publicación traducida automáticamente

Artículo escrito por yashchuahan 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 *