valores una sistematico seleccionar muestreo muestras lista hacer generar escoger como celdas aleatorios aleatorias r dataframe sample r-faq

una - Muestra filas aleatorias en el marco de datos



generar muestras aleatorias en r (7)

El paquete data.table proporciona la función DT[sample(.N, M)] , muestreando M filas aleatorias de la tabla de datos DT .

library(data.table) set.seed(10) mtcars <- data.table(mtcars) mtcars[sample(.N, 6)] mpg cyl disp hp drat wt qsec vs am gear carb 1: 14.7 8 440.0 230 3.23 5.345 17.42 0 0 3 4 2: 19.2 6 167.6 123 3.92 3.440 18.30 1 0 4 4 3: 17.3 8 275.8 180 3.07 3.730 17.60 0 0 3 3 4: 21.5 4 120.1 97 3.70 2.465 20.01 1 0 3 1 5: 22.8 4 108.0 93 3.85 2.320 18.61 1 1 4 1 6: 15.5 8 318.0 150 2.76 3.520 16.87 0 0 3 2

¿Estoy luchando para encontrar la función apropiada que devolvería un número específico de filas elegidas al azar sin reemplazo de un marco de datos en lenguaje R? ¿Puede alguien ayudarme?


En mi paquete R hay una función sample.rows solo para este propósito:

install.packages(''kimisc'') library(kimisc) example(sample.rows) smpl..> set.seed(42) smpl..> sample.rows(data.frame(a=c(1,2,3), b=c(4,5,6), row.names=c(''a'', ''b'', ''c'')), 10, replace=TRUE) a b c 3 6 c.1 3 6 a 1 4 c.2 3 6 b 2 5 b.1 2 5 c.3 3 6 a.1 1 4 b.2 2 5 c.4 3 6

Mejorar la sample al convertirla en una función S3 genérica fue una mala idea, según los comentarios de Joris Meys a una respuesta anterior .


Escribe uno! Envolver la respuesta de JC me da:

randomRows = function(df,n){ return(df[sample(nrow(df),n),]) }

Ahora haga que sea mejor comprobando primero si n <= nrow (df) y deteniéndose con un error.


La respuesta que da John Colby es la respuesta correcta. Sin embargo, si usted es un usuario de dplyr también existe la respuesta sample_n :

sample_n(df, 10)

muestrea aleatoriamente 10 filas del marco de datos. Llama a sample.int , así que realmente es la misma respuesta con menos escritura (y simplifica el uso en el contexto de magrittr ya que el marco de datos es el primer argumento).


Primero haz algunos datos:

> df = data.frame(matrix(rnorm(20), nrow=10)) > df X1 X2 1 0.7091409 -1.4061361 2 -1.1334614 -0.1973846 3 2.3343391 -0.4385071 4 -0.9040278 -0.6593677 5 0.4180331 -1.2592415 6 0.7572246 -0.5463655 7 -0.8996483 0.4231117 8 -1.0356774 -0.1640883 9 -0.3983045 0.7157506 10 -0.9060305 2.3234110

Luego selecciona algunas filas al azar:

> df[sample(nrow(df), 3), ] X1 X2 9 -0.3983045 0.7157506 2 -1.1334614 -0.1973846 10 -0.9060305 2.3234110


EDITAR : Esta respuesta ahora está desactualizada, ver la versión actualizada .

En mi paquete R, he mejorado la sample para que ahora se comporte como se espera también para los marcos de datos:

library(devtools); install_github(''kimisc'', ''krlmlr'') library(kimisc) example(sample.data.frame) smpl..> set.seed(42) smpl..> sample(data.frame(a=c(1,2,3), b=c(4,5,6), row.names=c(''a'', ''b'', ''c'')), 10, replace=TRUE) a b c 3 6 c.1 3 6 a 1 4 c.2 3 6 b 2 5 b.1 2 5 c.3 3 6 a.1 1 4 b.2 2 5 c.4 3 6

Esto se achieved haciendo una sample un método genérico S3 y proporcionando la funcionalidad necesaria (trivial) en una función. Una llamada a setMethod arregla todo. Se puede acceder a la implementación original a través de base::sample .


Seleccione una muestra aleatoria de un tipo tibble en R:

library("tibble") a <- your_tibble[sample(1:nrow(your_tibble), 150),]

nrow toma un tibble y devuelve el número de filas. El primer parámetro que se pasa a la sample es un rango desde 1 hasta el final de su tibble. El segundo parámetro pasado a la muestra, 150, es la cantidad de muestreos aleatorios que desea. El corte de corchetes especifica las filas de los índices devueltos. La variable ''a'' obtiene el valor del muestreo aleatorio.