una tabla seleccionar repetir rango para numeros numero muestra generar filas extraer entre eliminar datos como aleatorios aleatorio r data.table sample

seleccionar - ¿Cómo se extraen algunas filas aleatorias de una tabla de datos sobre la marcha?



seleccionar datos aleatorios en excel (3)

Tengo una tabla de datos grande (alrededor de 24000 filas y creciendo). Quiero subcontratar esa base de datos en función de un par de criterios y de ese subconjunto (termina siendo aproximadamente 3000 filas) Quiero muestrear aleatoriamente solo 4 filas. No quiero crear una tabla de datos de más o menos 3000 nombres, contar sus filas y luego muestrear en función del número de fila. ¿Cómo puedo hacerlo sobre la marcha? ¿O debería simplemente absorberlo creando la tabla y luego trabajando en ella, probándola y luego usando rm() para deshacerme de ella?

Vamos a simular mi problema

require(data.table) random.length <- sample(x = 15:30, size = 1) data.table(city=sample(c("Cape Town", "New York", "Pittsburgh", "Tel Aviv", "Amsterdam"), size=random.length, replace = TRUE), score = sample(x=1:10, size = random.length, replace=TRUE))

Eso hace una tabla de longitud aleatoria, que simula el hecho de que, dependiendo de mis criterios y de mi tabla de inicio, no sé cuál es la longitud de la tabla subcontratada con be

Ahora, si solo quisiera las primeras tres filas, podría hacerlo así

data.table(city=sample(c("Cape Town", "New York", "Pittsburgh", "Tel Aviv", "Amsterdam"), size=random.length, replace = TRUE), score = sample(x=1:10, size = random.length, replace=TRUE))[1:3]

Pero digamos que no quería las primeras tres filas sino tres filas aleatorias, entonces me gustaría hacer algo como esto ...

data.table(city=sample(c("Cape Town", "New York", "Pittsburgh", "Tel Aviv", "Amsterdam"), size=random.length, replace = TRUE), score = sample(x=1:10, size = random.length, replace=TRUE))[sample(x= 1:number of rows of that previous data.table,size = 3 ]

Eso no funcionará. ¿Cómo calculo, sobre la marcha, cuál fue la longitud del data.frame inicial?


Acabo de hacer .N trabajar en i . Nuevo elemento README:

.N ahora está disponible en i , FR#724 . Gracias al novato here indirectamente y Farrel directamente aquí .

Esto ahora funciona:

DT[...][...][sample(.N,3)]

p.ej

> random.length <- sample(x = 15:30, size = 1) > data.table(city = sample(c("Cape Town", "New York", "Pittsburgh", "Tel Aviv", "Amsterdam"),size=random.length, replace = TRUE), score = sample(x=1:10, size = random.length, replace=TRUE))[sample(.N, 3)] city score 1: New York 4 2: Pittsburgh 3 3: Cape Town 9 >


Hay un enfoque de dos pasos:

  1. Calcular el índice i usando .I
  2. Muestra en el índice i

Código de ejemplo.

require(data.table) random.length <- sample(x = 15:30, size = 1) data.table(city = sample(c("Cape Town", "New York", "Pittsburgh", "Tel Aviv", "Amsterdam"),size=random.length, replace = TRUE), score = sample(x=1:10, size = random.length, replace=TRUE))[,i := .I][sample(i, 3)]


Otra forma alternativa sería utilizar el enfoque de la aplicación.
Por ejemplo:

as.data.table(sapply(DT[], sample, 10))