Предположим, у меня действительно большая матрица разреженных данных, но я заинтересован только в том, чтобы взглянуть на образец, делающий их еще более разреженными. Предположим, у меня также есть фрейм данных с тройками, включая столбцы для строки / столбца / значения данных (импортированные из файла CSV). Я знаю, что могу использовать функцию библиотеки (Matrix) sparseMatrix () для создания разреженной матрицы, используя
sparseMatrix(i=df$row,j=df$column,x=df$value)
Однако из-за моих значений я получаю разреженную матрицу, которая состоит из миллионов строк на десятки тысяч столбцов (большинство из которых пустые, поскольку мое подмножество исключает большинство строк и столбцов). Все эти нулевые строки и столбцы в конечном итоге искажают некоторые из моих функций (например, кластеризацию - я получаю один кластер, который включает в себя источник, когда источник даже не является допустимой точкой).
Я хотел бы выполнить ту же операцию, но используя i и j в качестве имен строк и имен столбцов. Я попытался создать плотный вектор, сэмплировать до максимального размера и добавить значения, используя
denseMatrix <- matrix(0,nrows,ncols,dimnames=c(df$row,df$column))
denseMatrix[as.character(df$row),as.character(df$column)]=df$value
(на самом деле я установил его равным 1, потому что в данном случае меня не интересует значение), но я обнаружил, что оно заполняет всю матрицу, потому что оно принимает пересечение всех строк и столбцов а не просто row1 * col1, row2 * col2 ...
Кто-нибудь знает способ достичь того, что я пытаюсь сделать? В качестве альтернативы мне было бы хорошо заполнить разреженную матрицу и просто заставить ее как-то отбросить все нулевые строки и столбцы, чтобы сжать себя в более плотную форму (но я бы хотел сохранить некоторую ссылку на исходные номера строк и столбцов )
Я ценю любые предложения!
Вот пример:
> 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
Я бы хотел избавиться от столбцов 1,3 и 5, а также от строк 2 и 4. Это довольно тривиальный пример, но представьте, что вместо строк с номерами 1, 3 и 5 они были 1000, 3000 и 5000. Тогда между ними будет намного больше пустых строк. Вот что происходит, когда я использую плотную матрицу с именованными строками / столбцами
> 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