[R] Converting sparse matrix to data.frame in Matrix package
David Winsemius
dwinsemius at comcast.net
Fri Aug 20 06:25:19 CEST 2010
On Aug 19, 2010, at 7:56 PM, ericksonsm at aol.com wrote:
>
> Is there a way to get the coordinate list vectors back from the
> matrix a without any prior knowledge?
>
> a
>
> [,1] [,2] [,3] [,4] [,5]
> [1,] 0 0 0 1 0
> [2,] 2 1 0 0 0
> [3,] 0 0 3 0 1
>
>
> How to get:
>
> r = c(1,2,2,3,3)
> c = c(4,1,2,3,5)
> v = c(1,2,1,3,1)
>
?sparseMatrix # which has a See Also: "Consider CsparseMatrix and
similar class definition help files."
?"CsparseMatrix-class"
So ... not exactly in that order but "fixing" that problem (of column-
oriented format) is reasonably trivial:
> r= a at i +1
> r
[1] 2 2 3 1 3
> c= a at p[1:(length(a at p)-1)]+1
> c # noting that the choice of "c" for an object name seems a
really bad idea.
[1] 1 2 3 4 5
> v = a at x
> v
[1] 2 1 3 1 1
---- --- ----
> r[order(r)]
[1] 1 2 2 3 3
> c[order(r)]
[1] 4 1 2 3 5
> v[order(r)]
[1] 1 2 1 3 1
--
David.
>
>
> -----Original Message-----
> From: Phil Spector <spector at stat.berkeley.edu>
> To: ericksonsm at aol.com
> Cc: r-help at r-project.org
> Sent: Thu, Aug 19, 2010 7:35 pm
> Subject: Re: [R] Converting sparse matrix to data.frame in Matrix
> package
>
>
> This seems to work, although it eliminates the sparseness of the
> storage:
>
>> dimnames(a) = list(NULL,letters[1:5])
>> as.data.frame(as.matrix(a))
> a b c d e
> 1 0 0 0 1 0
> 2 2 1 0 0 0
> 3 0 0 3 0 1
>
> - Phil Spector
> Statistical Computing Facility
> Department of Statistics
> UC Berkeley
> spector at stat.berkeley.edu
>
> On Thu, 19 Aug 2010, ericksonsm at aol.com wrote:
>
>>
>>
>>
>> I am able to create a coordinate list sparse matrix this way:
>>
>> r = c(1,2,2,3,3)
>> c = c(4,1,2,3,5)
>> v = c(1,2,1,3,1)
>>
>> a = sparseMatrix(i=r,j=c,x=v)
>>
>> However, this results in an object that looks like this:
>>
>> a
>>
>> 3 x 5 sparse Matrix of class "dgCMatrix"
>>
>> [1,] . . . 1 .
>> [2,] 2 1 . . .
>> [3,] . . 3 . 1
>>
>> How do I convert this object into a data.frame that would look like
>> this:
>>
>> data.frame(a=c(0,2,0),b=c(0,1,0),c=c(0,0,3),d=c(1,0,0),e=c(0,0,1))
>>
>> a b c d e
>> 1 0 0 0 1 0
>> 2 2 1 0 0 0
>> 3 0 0 3 0 1
>>
>>
>>
>> [[alternative HTML version deleted]]
>>
>> ______________________________________________
>> R-help at r-project.org mailing list
>> https://stat.ethz.ch/mailman/listinfo/r-help
>> PLEASE do read the posting guide http://www.R-project.org/posting-guide.html
>> and provide commented, minimal, self-contained, reproducible code.
>>
>
>
>
> [[alternative HTML version deleted]]
>
> ______________________________________________
> R-help at r-project.org mailing list
> https://stat.ethz.ch/mailman/listinfo/r-help
> PLEASE do read the posting guide http://www.R-project.org/posting-guide.html
> and provide commented, minimal, self-contained, reproducible code.
David Winsemius, MD
West Hartford, CT
More information about the R-help
mailing list