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