Tengo un marco de datos que contiene 10k filas, para una columna dada X Tengo valores duplicados, ¿Cómo podemos seleccionar ALREDEDORMENTE UNA FILA que contenga este valor en esta columna?Selección aleatoria en Data Frame, para filas únicas
Respuesta
Su pregunta no está del todo clara, pero asumo que desea submuestrear todo el marco de datos, manteniendo una fila (elegida al azar) por "clase duplicada". Algo así como
library(plyr)
subsampled_data <- ddply(mydata,.(X),
function(x) {
x[sample(nrow(x),size=1),]
})
deben trabajar (no probado!)
Mi primera reacción habría sido algo como solución elegante ddply
de Ben. Sin embargo, sabiendo ahora que tienes un conjunto de datos tan grande, definitivamente hay formas más rápidas. Aquí está uno que será mucho más rápido si tiene muchos valores únicos:
RemoveDups <- function(df, column) {
inds = sample(1:nrow(df))
df = df[inds, ]
dups = duplicated(df[, column])
df = df[!dups, ]
inds = inds[!dups]
df[sort(inds, index=T)$ix, ]
}
simular algunos datos (en este caso con muchos valores únicos):
n.row = 10^6
n.col = 3
set.seed(12345)
data = data.frame(matrix(sample(1000, n.row*n.col, replace=T), nrow=n.row))
comparar los 2 métodos:
> system.time(ddply(data, 'X1', function(x) x[sample(nrow(x), size=1), ]))
user system elapsed
3.264 0.921 4.315
> system.time(RemoveDups(data, 'X1'))
user system elapsed
0.375 0.025 0.399
Elegante! Impresionante, gracias John – Rad
- 1. selección de filas aleatoria en I
- 2. selección de fila aleatoria rápida en Postgres
- 3. Selección aleatoria Resultado de MySQL
- 4. FFmpeg no puede decodificar H264 stream/frame data
- 5. Selección aleatoria de columnas de matriz
- 6. Consulta T-SQL: obtenga filas únicas en 2 columnas
- 7. Selección de matriz aleatoria sin seleccionar dos veces en JavaScript
- 8. Selección de filas aleatorias en MySQL
- 9. Selección de filas DISTINCT en álgebra relacional
- 10. Selección de varias filas en UIPickerView
- 11. Selección aleatoria de un elemento de una lista ponderada
- 12. Selección aleatoria de la clave de matriz javascript
- 13. Muestra aleatoria de filas del subconjunto de un dataframe R
- 14. Distribución aleatoria de datos
- 15. Separating excel selección de múltiples filas
- 16. MySQL: ¿Cómo recuperar una fila aleatoria o varias filas aleatorias?
- 17. Actualizar varias filas utilizando instrucción de selección
- 18. Selección de filas aleatorias con MySQL
- 19. Doctrine 2 Selección aleatoria de una fila (Compensación 0 o 1 indexada)?
- 20. Zend Framework - conteo de filas en la cláusula de selección?
- 21. android capture video frame
- 22. wxPython Disable Frame Frameizing
- 23. R - ¿Seleccionar filas para una muestra aleatoria de valores de columna?
- 24. evitar la selección de múltiples filas en WPF DataGrid
- 25. SlickGrid: anular la selección de todas las filas en
- 26. wxPython Frame ¿activar/desactivar?
- 27. Elección aleatoria ponderada en T-SQL
- 28. ¿Es posible usar un comando de tipo LOAD DATA INFILE para ACTUALIZAR filas en el db?
- 29. ClickJacking Filter para agregar X-FRAME-OPTIONS en respuesta
- 30. Android Frame por Frame Problema de animación en elementos en un CursorAdapter
Esta interpretación de la pregunta de OP (críptico) parece más probable que la mía, por lo que iba a sugerir 'df [muestra (que (df $ X == myVal), 1),]'. – joran
Gracias chicos, estoy intentando la sugerencia de Ben, Joran, cómo hacerlo si quiero aplicar esto a todo el valor de columna porque myVal como se sugiere en los fragmentos cambia a lo largo de mi columna X, lo que significa que tengo cientos de 5 por ejemplo y cientos de 8s, etc. – Rad
La solución de @Rad Ben se encargará de eso; el mío no lo hará. Interpretamos su pregunta de manera diferente. – joran