Добавление значений в матрицу с использованием векторов индекса, которые включают имена строк и столбцов

Предположим, у меня действительно большая матрица разреженных данных, но меня интересует только ее выборка, что делает ее еще более разреженной. Предположим, у меня также есть фрейм данных из троек, включая столбцы для строки / столбца / значения данных (импортированных из файла csv). Я знаю, что могу использовать функцию sparseMatrix () библиотеки (Matrix) для создания разреженной матрицы, используя

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
6
задан Iterator 26 September 2011 в 18:20
поделиться