Giả sử tôi có ma trận dữ liệu thưa thớt thực sự lớn, nhưng tôi chỉ quan tâm đến việc xem mẫu của nó làm cho nó trở nên thưa thớt hơn. Giả sử tôi cũng có một khung dữ liệu của bộ ba bao gồm các cột cho hàng/cột/giá trị của dữ liệu (được nhập từ tệp csv). Tôi biết tôi có thể sử dụng sparseMatrix() chức năng của thư viện (Matrix) để tạo ra một ma trận thưa thớt sử dụngThêm giá trị vào ma trận bằng cách sử dụng các chỉ mục bao gồm tên hàng và cột
sparseMatrix(i=df$row,j=df$column,x=df$value)
Tuy nhiên, do giá trị của tôi, tôi kết thúc với một ma trận thưa thớt đó là hàng triệu hàng bởi hàng chục ngàn cột (hầu hết trong số đó trống vì tập hợp con của tôi loại trừ hầu hết các hàng và cột). Tất cả những hàng và cột bằng 0 này đều kết thúc một số chức năng của tôi (lấy phân cụm ví dụ - tôi kết thúc với một cụm bao gồm nguồn gốc khi nguồn gốc không phải là điểm hợp lệ). Tôi muốn thực hiện thao tác tương tự, nhưng sử dụng i và j làm tên và tên. Tôi đã cố gắng tạo ra một vector dày đặc, lấy mẫu xuống đến kích thước tối đa và thêm giá trị sử dụng
denseMatrix <- matrix(0,nrows,ncols,dimnames=c(df$row,df$column))
denseMatrix[as.character(df$row),as.character(df$column)]=df$value
(thực sự tôi đã thiết lập nó bằng 1 vì tôi không quan tâm đến giá trị trong trường hợp này) nhưng tôi đã tìm thấy nó lấp đầy trong toàn bộ ma trận bởi vì nó có thập tự giá của tất cả các hàng và cột hơn là chỉ row1 * col1, row2 * col2 ... Có ai biết một cách để thực hiện những gì tôi đang cố gắng làm gì? Ngoài ra tôi sẽ được tốt với điền vào một ma trận thưa thớt và chỉ đơn giản là có nó bằng cách nào đó loại bỏ tất cả các hàng không và cột để nhỏ gọn chính nó vào một hình thức dày đặc hơn (nhưng tôi muốn duy trì một số tài liệu tham khảo trở lại số hàng và cột ban đầu) Tôi đánh giá cao mọi đề xuất!
Dưới đây là một ví dụ:
> 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
Tôi muốn thoát khỏi colums 1,3 và 5 cũng như hàng 2 và 4. Đây là một ví dụ khá tầm thường, nhưng hãy tưởng tượng nếu thay vì phải số hàng 1, 3 và 5 là 1000, 3000 và 5000. Sau đó sẽ có nhiều hàng trống hơn giữa chúng. Đây là những gì xảy ra khi tôi sử dụng một ma trận dày đặc với tên hàng/cột
> 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
Bạn có thể hiển thị một ví dụ nhỏ, nói 10x10, ma trận thưa thớt, cộng với ba bạn có thể sử dụng trong tình huống đó và tập hợp con nào bạn muốn? –
Bạn đã điều tra gói SparseM chưa? – Spacedman
Tôi đang thêm một ví dụ trên – dscheffy