una tablas tabla seleccion resueltos para numeros muestreo libro hacer estadistica ejercicios ejemplos datos daniels como aleatorios aleatorias r data.table

tablas - tabla de numeros aleatorios para muestreo pdf



Muestra filas aleatorias dentro de cada grupo en una tabla de datos. (4)

Creo que la respuesta de joran puede ser más generalizada. Los detalles están aquí ( cómo muestrea grupos en una tabla de datos con una advertencia ) pero creo que esta solución explica los casos en los que no hay "3" filas para muestrear.

La solución actual producirá un error cuando intente muestrear "x" veces de las filas que tienen menos de "x" valores comunes. En el caso siguiente, x = 3. Y tiene en cuenta esta advertencia. (Solución hecha por nrussell)

set.seed(123) ## DT <- data.table( a=c(1,1,1,1:15,1,1), b=sample(1:1000,20)) ## R> DT[,.SD[sample(.N,min(.N,3))],by = a] a b 1: 1 288 2: 1 881 3: 1 409 4: 2 937 5: 3 46 6: 4 525 7: 5 887 8: 6 548 9: 7 453 10: 8 948 11: 9 449 12: 10 670 13: 11 566 14: 12 102 15: 13 993 16: 14 243 17: 15 42

¿Cómo usaría data.table para tomar de manera eficiente una muestra de filas dentro de cada grupo en un marco de datos?

DT = data.table(a = sample(1:2), b = sample(1:1000,20)) DT a b 1: 2 562 2: 1 183 3: 2 180 4: 1 874 5: 2 533 6: 1 21 7: 2 57 8: 1 20 9: 2 39 10: 1 948 11: 2 799 12: 1 893 13: 2 993 14: 1 69 15: 2 906 16: 1 347 17: 2 969 18: 1 130 19: 2 118 20: 1 732

Estaba pensando en algo como: DT[ , sample(??, 3), by = a] que devolvería una muestra de tres filas por cada "a" (el orden de las filas devueltas no es significativo):

a b 1: 2 180 2: 2 57 3: 2 799 4: 1 69 5: 1 347 6: 1 732


Inspirado por esta respuesta de David Arenburg , otro método para evitar la asignación de .SD sería muestrear los grupos y luego unirse a los datos originales utilizando .EACHI

DT[ DT[, sample(.N, 3), by=a], b[i.V1], on="a", by=.EACHI] # a V1 # 1: 2 42 # 2: 2 498 # 3: 2 179 # 4: 1 469 # 5: 1 93 # 6: 1 898

donde la línea DT[, sample(.N, 3), by=a] nos da una muestra para cada grupo

# a V1 # 1: 1 9 # 2: 1 3 # 3: 1 2 # 4: 2 4 # 5: 2 9 # ---

entonces podemos usar V1 para darnos la b que corresponde.


Tal vez algo como esto?

> DT[,.SD[sample(.N, min(3,.N))],by = a] a b 1: 1 744 2: 1 497 3: 1 167 4: 2 888 5: 2 950 6: 2 343

(Gracias a Josh por la corrección, abajo.)


Muestreo estratificado > sobremuestreo

size=don[y==1,.(strata=length(iden)),by=.(y,x)] # count of iden by strata table(don$x,don$y) don<-merge(don,size[,.(y,strata)],by="x") #merge strata values don_strata=don[,.SD[sample(.N,strata)],by=.(y,x)]