Supongamos que tengo una matriz realmente grande de datos dispersos, pero solo me interesa ver una muestra que la haga aún más dispersa. Supongamos que también tengo un marco de datos de tripletas que incluye columnas para fila/columna/valor de los datos (importados de un archivo csv). Sé que puedo utilizar la matriz dispersa() la función de biblioteca (Matrix) para crear una matriz dispersa utilizandoAgregando valores a una matriz usando vectores de índice que incluyen nombres de fila y columna
sparseMatrix(i=df$row,j=df$column,x=df$value)
Sin embargo, a causa de mis valores termino con una matriz dispersa que es millones de filas de decenas de miles de columnas (la mayoría de ellas están vacías porque mi subconjunto excluye la mayoría de las filas y columnas). Todas esas filas y columnas cero terminan desviando algunas de mis funciones (por ejemplo, la agrupación en clúster: termino con un clúster que incluye el origen cuando el origen ni siquiera es un punto válido). Me gustaría realizar la misma operación, pero usando i y j como rownames y colnames. He intentado crear un vector densa, el muestreo de hasta el tamaño máximo y la adición de valores utilizando
denseMatrix <- matrix(0,nrows,ncols,dimnames=c(df$row,df$column))
denseMatrix[as.character(df$row),as.character(df$column)]=df$value
(De hecho, he estado fijando es igual a 1, porque no estoy interesado en el valor en este caso) pero he estado encontrando que llena toda la matriz porque toma la cruz de todas las filas y columnas en lugar de solo row1 * col1, row2 * col2 ... ¿Alguien sabe una manera de lograr lo que intento? ¿hacer? Alternativamente, estaría bien rellenar una matriz dispersa y simplemente desechar de alguna manera todas las filas y columnas cero para compactarla en una forma más densa (pero me gustaría mantener alguna referencia a los números originales de filas y columnas) ¡Agradezco cualquier sugerencia!
He aquí un ejemplo:
> rows<-c(3,1,3,5)
> cols<-c(2,4,6,6)
> mtx<-sparseMatrix(i=rows,j=cols,x=1)
> mtx
5 x 6 sparse Matrix of class "dgCMatrix"
[1,] . . . 1 . .
[2,] . . . . . .
[3,] . 1 . . . 1
[4,] . . . . . .
[5,] . . . . . 1
me gustaría deshacerse de las columnas 1,3 y 5, así como las filas 2 y 4. Este es un ejemplo bastante trivial, pero imagino que si en lugar de tener los números de fila 1, 3 y 5 eran 1000, 3000 y 5000. Entonces habría muchas más filas vacías entre ellos. Esto es lo que sucede cuando el uso de una matriz densa con el nombre filas/columnas
> dmtx<-matrix(0,3,3,dimnames=list(c(1,3,5),c(2,4,6)))
> dmtx
2 4 6
1 0 0 0
3 0 0 0
5 0 0 0
> dmtx[as.character(rows),as.character(cols)]=1
> dmtx
2 4 6
1 1 1 1
3 1 1 1
5 1 1 1
¿Puedes mostrar un pequeño ejemplo, digamos 10x10, matriz dispersa, más los trillizos que podrías usar en esa situación, y qué subconjunto deseas? –
¿Has investigado el paquete SparseM? – Spacedman
Estoy agregando un ejemplo sobre – dscheffy