2012-04-20 13 views
12

Si tengo un gran conjunto de datos en R, ¿cómo puedo tomar muestras aleatorias de los datos teniendo en cuenta la distribución de los datos originales, particularmente si los datos son asimétricos y solo 1% pertenecer a una clase menor y quiero tomar una muestra sesgada de los datos?Tomando una muestra desproporcionada de un conjunto de datos en R

+1

Importe los datos, encuentre los pesos para sus "niveles" y deje que 'sample' se encargue del resto. Ayudaría si pudieras reducir tu pregunta (con al menos datos de muestra - http://stackoverflow.com/questions/5963269/how-to-make-a-great-r-reproducible-example). –

+0

Vea también http://stackoverflow.com/questions/2923092/how-do-i-sub-sample-data-by-group-using-ddply –

Respuesta

20

La función sample(x, n, replace = FALSE, prob = NULL) toma una muestra de un vector x del tamaño n. Esta muestra se puede con o sin reemplazo, y las probabilidades de seleccionar cada elemento a la muestra puede ser o bien el mismo para cada elemento de, o un vector informado por el usuario.

Si usted quiere tomar una muestra de la mismas probabilidades para cada elemento con 50 casos, todo lo que tiene que hacer es

n <- 50 
smpl <- df[sample(nrow(df), 50),] 

Sin embargo, si usted quiere dar diferentes probabilidades de ser seleccionado para los elementos, digamos, elementos que sexo es M tiene probabilidad 0,25, mientras que aquellos cuya sexo es F tiene prob 0,75, que sh ould do

n <- 50 
prb <- ifelse(sex=="M",0.25,0.75) 
smpl <- df[sample(nrow(df), 50, prob = prb),] 
+0

A menos que me pierda algo obvio aquí, obtengo 'Error en ifelse (sexo == "M", 0.25, 0.75): objeto 'sex' no encontrado 'de intentar ejecutar el último ejemplo. – Harry

+1

Acabo de hacer que funcione con 'prob = ifelse (df $ sex ==" M ", 0.25, 0.75)' en la función 'sample', sin embargo. – Harry

Cuestiones relacionadas