Tomar una muestra aleatoria basada en grupos en R

El lenguaje de programación R nos proporciona muchos paquetes para tomar muestras aleatorias de objetos de datos, marcos de datos o tablas de datos y agregarlos en grupos.

Método 1: usar la biblioteca plyr

La biblioteca «plyr» se puede instalar y cargar en el espacio de trabajo que se utiliza para realizar estadísticas y manipulación de datos. El método ddply() se aplica para cada subconjunto del marco de datos especificado, seguido de la combinación de los resultados en un marco de datos. 

Sintaxis:

ddply( .datos, .variables, .diversión = NULL)

Parámetro – 

data – El marco de datos a usar

variables – los parámetros de agrupación

fun – la función que se va a aplicar. En este caso, se aplica el método sample(nrow(x),y) que extrae y filas de cada grupo de las variables elegidas para el segundo parámetro del método ddply().

Ejemplo:

R

# importing required libraries
library("plyr")
  
# create dataframe
data_frame<-data.frame(col1=c(rep('G1',50),rep('G2',50),rep('G3',50)), 
                col2=rep(letters[1:5],30)
                )
  
print("Original DataFrame")
head(data_frame)
  
# pick 3 samples of each from data frame
data_mod <- ddply(data_frame,.(col1),function(x) x[sample(nrow(x),5),])
print("Modified DataFrame")
print (data_mod)

Producción

[1] "Original DataFrame" 
  col1 col2 
1   G1    a 
2   G1    b 
3   G1    c 
4   G1    d 
5   G1    e 
6   G1    a 
[1] "Modified DataFrame" 
   col1 col2 
1    G1    d 
2    G1    e 
3    G1    d 
4    G1    a 
5    G1    a 
6    G2    b 
7    G2    c 
8    G2    d 
9    G2    d 
10   G2    e 
11   G3    c 
12   G3    e 
13   G3    b 
14   G3    b 
15   G3    d

Método 2: usar la biblioteca dplyr 

La biblioteca «dplyr» se puede instalar y cargar en el espacio de trabajo que se utiliza para realizar la manipulación de datos. Este paquete permite una gran variedad de métodos para filtrar, crear subconjuntos y extraer datos en función de la aplicación de restricciones y condiciones. El marco de datos está sujeto a múltiples operaciones utilizando el operador de tubería.

El método group_by se usa para dividir y segregar la fecha en función de los grupos contenidos en las columnas específicas. La columna requerida para agrupar se especifica como un argumento de esta función. Puede contener varios nombres de columna.

Sintaxis:

grupo_por(col1, col2, …)

A esto le sigue la aplicación del método sample_n() que se usa para seleccionar filas aleatorias del marco de datos con el argumento que indica el número de filas para muestrear de cada grupo. 

Ejemplo:

R

# importing required libraries
library("dplyr")
  
# create dataframe
data_frame<-data.frame(col1=c(rep('G1',50),rep('G2',50),
                              rep('G3',50)), 
                col2=rep(letters[1:5],30)
                )
  
print("Original DataFrame")
head(data_frame)
  
# pick 3 samples of each from data frame
data_mod <- data_frame %>% group_by(col1) %>% sample_n(3)
print("Modified DataFrame")
print (data_mod)

Producción

[1] "Original DataFrame" 
  col1 col2 
1   G1    a 
2   G1    b 
3   G1    c 
4   G1    d 
5   G1    e 
6   G1    a 
[1] "Modified DataFrame" 
# A tibble: 9 x 2 
# Groups:   col1 [3]   
 col1  col2    
<chr> <chr> 
1 G1    d     
2 G1    e     
3 G1    c     
4 G2    a     
5 G2    a     
6 G2    c     
7 G3    b     
8 G3    a     
9 G3    a 

Método 3: Usando data.table

La biblioteca data.table se puede utilizar para la agregación rápida de grandes datos organizados en estructuras tabulares. El paquete se puede cargar e instalar en el espacio de trabajo.

La indexación de la tabla de datos se puede realizar usando el parámetro .SD que selecciona una muestra de datos de agrupación usando el parámetro «por». El número de filas elegidas de cada grupo depende del atributo de tamaño especificado en el método de indexación. La salida se devuelve en forma de una tabla de datos.

Sintaxis:

data_frame[ , .SD[sample(x = .N, size = n)], by = ]

Ejemplo:

R

# importing required libraries
library("data.table")
  
# create dataframe
data_frame<-data.table(col1=c(rep('G1',50),rep('G2',50),
                              rep('G3',50)), 
                col2=rep(letters[1:5],30)
                )
  
print("Original DataFrame")
head(data_frame)
  
# pick 3 samples of each from data frame
data_mod <- data_frame[, .SD[sample(x = .N, size = 5)], by = col1]
print("Modified DataFrame")
print (data_mod)

Producción

[1] "Original DataFrame" 
col1 col2 
1:   G1    a 
2:   G1    b 
3:   G1    c 
4:   G1    d 
5:   G1    e 
6:   G1    a 
[1] "Modified DataFrame" 
col1 col2  
1:   G1    a  
2:   G1    e  
3:   G1    d  
4:   G1    e  
5:   G1    a  
6:   G2    c  
7:   G2    c  
8:   G2    c  
9:   G2    d 
10:   G2    e 
11:   G3    b 
12:   G3    e 
13:   G3    d 
14:   G3    d 
15:   G3    d

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 *