Załóżmy, że mam naprawdę dużą macierz rzadkich danych, ale interesuje mnie tylko oglądanie jej próbki, co czyni ją jeszcze bardziej rzadką. Przypuśćmy, że mam również ramkę danych z trójek, w tym kolumny dla wiersza/kolumny/wartości danych (importowane z pliku csv). Wiem, że mogę wykorzystać macierz rzadka() funkcji biblioteki (Matrix), aby utworzyć macierz rzadką korzystającDodawanie wartości do macierzy za pomocą wektorów indeksu, które zawierają nazwy wierszy i kolumn.
sparseMatrix(i=df$row,j=df$column,x=df$value)
Jednakże, ze względu na moje wartości I skończyć z rozrzedzony matrycy, która jest miliony wierszy przez dziesiątki tysięcy kolumny (z których większość jest pusta, ponieważ mój podzbiór wyklucza większość wierszy i kolumn). Wszystkie te zerowe wiersze i kolumny kończą się przekrzywianiem niektórych z moich funkcji (na przykład klastrowaniem - kończę na jednym klastrze, który zawiera pochodzenie, gdy punkt początkowy nie jest nawet prawidłowym punktem). Chciałbym wykonać tę samą operację, ale używając i i j jako rownów i nazw kolorów. Próbowałem tworząc gęstą wektor, próbkowanie w dół do maksymalnej wielkości i dodawanie wartości używając
denseMatrix <- matrix(0,nrows,ncols,dimnames=c(df$row,df$column))
denseMatrix[as.character(df$row),as.character(df$column)]=df$value
(faktycznie byłem ustawienie to równy 1, ponieważ nie jestem zainteresowany wartość w tym przypadku) ale znalazłem to wypełnia całą macierzy, ponieważ bierze krzyż wszystkich wierszy i kolumn, a nie tylko wiersz1 * col1, wiersz2 * col2 ... Czy ktoś zna sposób, aby osiągnąć to, co próbuję zrobić? Alternatywnie byłoby dobrze z wypełnieniem rzadkiej macierzy i po prostu po to, by w jakiś sposób odrzucić wszystkie zerowe wiersze i kolumny, aby zagęścić się w gęstszą formę (ale chciałbym zachować pewne odniesienie do oryginalnego wiersza i kolumny) Doceniam wszelkie sugestie!
Oto przykład:
> 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
Chciałbym pozbyć colums 1,3 i 5, a także wierszy 2 i 4. Jest to dość banalny przykład, ale wyobraźcie sobie, że zamiast liczby rzędów 1, 3 i 5 wynosiły 1000, 3000 i 5000. Wtedy między nimi byłoby o wiele więcej pustych rzędów. Oto co się dzieje, gdy za pomocą gęstej matrycy z wymienionych wierszy/kolumn
> 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
Czy możesz pokazać mały przykład, powiedzmy 10x10, rzadką macierz, plus tryplety, których możesz użyć w tej sytuacji i jaki podzbiór chcesz? –
Czy sprawdziłeś pakiet SparseM? – Spacedman
Dodaję przykład powyżej – dscheffy