converting a dgCMatrix to data frame
I would like to convert a sparse matrix into a data frame of the type (row,column, value). I have found questions such as http://r.789695.n4.nabble.com/Converting-sparse-matrix-to-data-frame-in-Matrix-package-td2332012.html that in the question start with row,column,value and create a sparse matrix. I want the inverse, and I cannot use the as.matrix function, because the matrix is too large. Here is a small example.
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)
3 x 5 sparse Matrix of class "dgCMatrix"
[1,] . . . 1 .
[2,] 2 1 . . .
[3,] . . 3 . 1
Can I get a data.frame
r c v
1 1 4 1
2 2 1 2
3 2 2 1
4 3 3 3
5 3 5 1
Thank you
r sparse-matrix
add a comment |
I would like to convert a sparse matrix into a data frame of the type (row,column, value). I have found questions such as http://r.789695.n4.nabble.com/Converting-sparse-matrix-to-data-frame-in-Matrix-package-td2332012.html that in the question start with row,column,value and create a sparse matrix. I want the inverse, and I cannot use the as.matrix function, because the matrix is too large. Here is a small example.
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)
3 x 5 sparse Matrix of class "dgCMatrix"
[1,] . . . 1 .
[2,] 2 1 . . .
[3,] . . 3 . 1
Can I get a data.frame
r c v
1 1 4 1
2 2 1 2
3 2 2 1
4 3 3 3
5 3 5 1
Thank you
r sparse-matrix
for calculating inverse, as you mention,solve()doesn't work?(a %*% t(a)) %>% solveseems to return asparseMatrixobject. Unless you need generalized inverse?
– Nutle
Nov 26 '18 at 18:25
not a matrix inverse, the question I pointed to started with vectors to create a data frame, then created a dense matrix. I wanted to start with a sparse matrix, and get a data frame of (row,col,value). I want to invert his problem, not invert the matrix.
– HowYaDoing
Nov 26 '18 at 20:00
oh, I see. Still, it's an open question (for me) of how to use genericmatrixmethods (such asMASS::ginv, for example), withsparseMatrixobjects without resolving toas.matrix. I thought you were after a similar thing, but sadly the accepted answer does not solve it.
– Nutle
Nov 26 '18 at 20:03
add a comment |
I would like to convert a sparse matrix into a data frame of the type (row,column, value). I have found questions such as http://r.789695.n4.nabble.com/Converting-sparse-matrix-to-data-frame-in-Matrix-package-td2332012.html that in the question start with row,column,value and create a sparse matrix. I want the inverse, and I cannot use the as.matrix function, because the matrix is too large. Here is a small example.
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)
3 x 5 sparse Matrix of class "dgCMatrix"
[1,] . . . 1 .
[2,] 2 1 . . .
[3,] . . 3 . 1
Can I get a data.frame
r c v
1 1 4 1
2 2 1 2
3 2 2 1
4 3 3 3
5 3 5 1
Thank you
r sparse-matrix
I would like to convert a sparse matrix into a data frame of the type (row,column, value). I have found questions such as http://r.789695.n4.nabble.com/Converting-sparse-matrix-to-data-frame-in-Matrix-package-td2332012.html that in the question start with row,column,value and create a sparse matrix. I want the inverse, and I cannot use the as.matrix function, because the matrix is too large. Here is a small example.
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)
3 x 5 sparse Matrix of class "dgCMatrix"
[1,] . . . 1 .
[2,] 2 1 . . .
[3,] . . 3 . 1
Can I get a data.frame
r c v
1 1 4 1
2 2 1 2
3 2 2 1
4 3 3 3
5 3 5 1
Thank you
r sparse-matrix
r sparse-matrix
asked Nov 26 '18 at 17:23
HowYaDoingHowYaDoing
495311
495311
for calculating inverse, as you mention,solve()doesn't work?(a %*% t(a)) %>% solveseems to return asparseMatrixobject. Unless you need generalized inverse?
– Nutle
Nov 26 '18 at 18:25
not a matrix inverse, the question I pointed to started with vectors to create a data frame, then created a dense matrix. I wanted to start with a sparse matrix, and get a data frame of (row,col,value). I want to invert his problem, not invert the matrix.
– HowYaDoing
Nov 26 '18 at 20:00
oh, I see. Still, it's an open question (for me) of how to use genericmatrixmethods (such asMASS::ginv, for example), withsparseMatrixobjects without resolving toas.matrix. I thought you were after a similar thing, but sadly the accepted answer does not solve it.
– Nutle
Nov 26 '18 at 20:03
add a comment |
for calculating inverse, as you mention,solve()doesn't work?(a %*% t(a)) %>% solveseems to return asparseMatrixobject. Unless you need generalized inverse?
– Nutle
Nov 26 '18 at 18:25
not a matrix inverse, the question I pointed to started with vectors to create a data frame, then created a dense matrix. I wanted to start with a sparse matrix, and get a data frame of (row,col,value). I want to invert his problem, not invert the matrix.
– HowYaDoing
Nov 26 '18 at 20:00
oh, I see. Still, it's an open question (for me) of how to use genericmatrixmethods (such asMASS::ginv, for example), withsparseMatrixobjects without resolving toas.matrix. I thought you were after a similar thing, but sadly the accepted answer does not solve it.
– Nutle
Nov 26 '18 at 20:03
for calculating inverse, as you mention,
solve() doesn't work? (a %*% t(a)) %>% solve seems to return a sparseMatrix object. Unless you need generalized inverse?– Nutle
Nov 26 '18 at 18:25
for calculating inverse, as you mention,
solve() doesn't work? (a %*% t(a)) %>% solve seems to return a sparseMatrix object. Unless you need generalized inverse?– Nutle
Nov 26 '18 at 18:25
not a matrix inverse, the question I pointed to started with vectors to create a data frame, then created a dense matrix. I wanted to start with a sparse matrix, and get a data frame of (row,col,value). I want to invert his problem, not invert the matrix.
– HowYaDoing
Nov 26 '18 at 20:00
not a matrix inverse, the question I pointed to started with vectors to create a data frame, then created a dense matrix. I wanted to start with a sparse matrix, and get a data frame of (row,col,value). I want to invert his problem, not invert the matrix.
– HowYaDoing
Nov 26 '18 at 20:00
oh, I see. Still, it's an open question (for me) of how to use generic
matrix methods (such as MASS::ginv, for example), with sparseMatrix objects without resolving to as.matrix. I thought you were after a similar thing, but sadly the accepted answer does not solve it.– Nutle
Nov 26 '18 at 20:03
oh, I see. Still, it's an open question (for me) of how to use generic
matrix methods (such as MASS::ginv, for example), with sparseMatrix objects without resolving to as.matrix. I thought you were after a similar thing, but sadly the accepted answer does not solve it.– Nutle
Nov 26 '18 at 20:03
add a comment |
1 Answer
1
active
oldest
votes
You can use
b = as.data.frame(summary(a))
# i j x
# 1 2 1 2
# 2 2 2 1
# 3 3 3 3
# 4 1 4 1
# 5 3 5 1
If you need the same order as in your example, you can use
b = b[order(b$i),]
# i j x
# 4 1 4 1
# 1 2 1 2
# 2 2 2 1
# 3 3 3 3
# 5 3 5 1
Another alternative, though not quite as neat, is to use
b = as(a, "dgTMatrix")
cbind.data.frame(r = b@i + 1, c = b@j + 1, x = b@x)
Any idea whether this approach is indeed cheaper thanas.matrix %>% as.data.frameapproach? (colnames doesn't matter)
– Nutle
Nov 26 '18 at 18:17
also, in the first caseb %*% t(b)returns the following error:requires numeric/complex matrix/vector arguments. I don't see how can we avoidas.matrixhere
– Nutle
Nov 26 '18 at 18:21
Thanks. That is exactly what I was looking for!!!
– HowYaDoing
Nov 26 '18 at 19:54
@Nutle your comments are't really applicable here. As noted already by OP you seem to have mistaken that the question is about inverse matrices - it is not. Maybe consider deleting your comments in case they could inadvertently be misleading to other readers?
– dww
Nov 29 '18 at 15:15
I will cite the exact words from the OP's question:and I cannot use the as.matrix function, because the matrix is too large.
– Nutle
Nov 29 '18 at 15:30
|
show 3 more comments
Your Answer
StackExchange.ifUsing("editor", function () {
StackExchange.using("externalEditor", function () {
StackExchange.using("snippets", function () {
StackExchange.snippets.init();
});
});
}, "code-snippets");
StackExchange.ready(function() {
var channelOptions = {
tags: "".split(" "),
id: "1"
};
initTagRenderer("".split(" "), "".split(" "), channelOptions);
StackExchange.using("externalEditor", function() {
// Have to fire editor after snippets, if snippets enabled
if (StackExchange.settings.snippets.snippetsEnabled) {
StackExchange.using("snippets", function() {
createEditor();
});
}
else {
createEditor();
}
});
function createEditor() {
StackExchange.prepareEditor({
heartbeatType: 'answer',
autoActivateHeartbeat: false,
convertImagesToLinks: true,
noModals: true,
showLowRepImageUploadWarning: true,
reputationToPostImages: 10,
bindNavPrevention: true,
postfix: "",
imageUploader: {
brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
allowUrls: true
},
onDemand: true,
discardSelector: ".discard-answer"
,immediatelyShowMarkdownHelp:true
});
}
});
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53486135%2fconverting-a-dgcmatrix-to-data-frame%23new-answer', 'question_page');
}
);
Post as a guest
Required, but never shown
1 Answer
1
active
oldest
votes
1 Answer
1
active
oldest
votes
active
oldest
votes
active
oldest
votes
You can use
b = as.data.frame(summary(a))
# i j x
# 1 2 1 2
# 2 2 2 1
# 3 3 3 3
# 4 1 4 1
# 5 3 5 1
If you need the same order as in your example, you can use
b = b[order(b$i),]
# i j x
# 4 1 4 1
# 1 2 1 2
# 2 2 2 1
# 3 3 3 3
# 5 3 5 1
Another alternative, though not quite as neat, is to use
b = as(a, "dgTMatrix")
cbind.data.frame(r = b@i + 1, c = b@j + 1, x = b@x)
Any idea whether this approach is indeed cheaper thanas.matrix %>% as.data.frameapproach? (colnames doesn't matter)
– Nutle
Nov 26 '18 at 18:17
also, in the first caseb %*% t(b)returns the following error:requires numeric/complex matrix/vector arguments. I don't see how can we avoidas.matrixhere
– Nutle
Nov 26 '18 at 18:21
Thanks. That is exactly what I was looking for!!!
– HowYaDoing
Nov 26 '18 at 19:54
@Nutle your comments are't really applicable here. As noted already by OP you seem to have mistaken that the question is about inverse matrices - it is not. Maybe consider deleting your comments in case they could inadvertently be misleading to other readers?
– dww
Nov 29 '18 at 15:15
I will cite the exact words from the OP's question:and I cannot use the as.matrix function, because the matrix is too large.
– Nutle
Nov 29 '18 at 15:30
|
show 3 more comments
You can use
b = as.data.frame(summary(a))
# i j x
# 1 2 1 2
# 2 2 2 1
# 3 3 3 3
# 4 1 4 1
# 5 3 5 1
If you need the same order as in your example, you can use
b = b[order(b$i),]
# i j x
# 4 1 4 1
# 1 2 1 2
# 2 2 2 1
# 3 3 3 3
# 5 3 5 1
Another alternative, though not quite as neat, is to use
b = as(a, "dgTMatrix")
cbind.data.frame(r = b@i + 1, c = b@j + 1, x = b@x)
Any idea whether this approach is indeed cheaper thanas.matrix %>% as.data.frameapproach? (colnames doesn't matter)
– Nutle
Nov 26 '18 at 18:17
also, in the first caseb %*% t(b)returns the following error:requires numeric/complex matrix/vector arguments. I don't see how can we avoidas.matrixhere
– Nutle
Nov 26 '18 at 18:21
Thanks. That is exactly what I was looking for!!!
– HowYaDoing
Nov 26 '18 at 19:54
@Nutle your comments are't really applicable here. As noted already by OP you seem to have mistaken that the question is about inverse matrices - it is not. Maybe consider deleting your comments in case they could inadvertently be misleading to other readers?
– dww
Nov 29 '18 at 15:15
I will cite the exact words from the OP's question:and I cannot use the as.matrix function, because the matrix is too large.
– Nutle
Nov 29 '18 at 15:30
|
show 3 more comments
You can use
b = as.data.frame(summary(a))
# i j x
# 1 2 1 2
# 2 2 2 1
# 3 3 3 3
# 4 1 4 1
# 5 3 5 1
If you need the same order as in your example, you can use
b = b[order(b$i),]
# i j x
# 4 1 4 1
# 1 2 1 2
# 2 2 2 1
# 3 3 3 3
# 5 3 5 1
Another alternative, though not quite as neat, is to use
b = as(a, "dgTMatrix")
cbind.data.frame(r = b@i + 1, c = b@j + 1, x = b@x)
You can use
b = as.data.frame(summary(a))
# i j x
# 1 2 1 2
# 2 2 2 1
# 3 3 3 3
# 4 1 4 1
# 5 3 5 1
If you need the same order as in your example, you can use
b = b[order(b$i),]
# i j x
# 4 1 4 1
# 1 2 1 2
# 2 2 2 1
# 3 3 3 3
# 5 3 5 1
Another alternative, though not quite as neat, is to use
b = as(a, "dgTMatrix")
cbind.data.frame(r = b@i + 1, c = b@j + 1, x = b@x)
edited Nov 26 '18 at 17:56
answered Nov 26 '18 at 17:45
dwwdww
15.2k22656
15.2k22656
Any idea whether this approach is indeed cheaper thanas.matrix %>% as.data.frameapproach? (colnames doesn't matter)
– Nutle
Nov 26 '18 at 18:17
also, in the first caseb %*% t(b)returns the following error:requires numeric/complex matrix/vector arguments. I don't see how can we avoidas.matrixhere
– Nutle
Nov 26 '18 at 18:21
Thanks. That is exactly what I was looking for!!!
– HowYaDoing
Nov 26 '18 at 19:54
@Nutle your comments are't really applicable here. As noted already by OP you seem to have mistaken that the question is about inverse matrices - it is not. Maybe consider deleting your comments in case they could inadvertently be misleading to other readers?
– dww
Nov 29 '18 at 15:15
I will cite the exact words from the OP's question:and I cannot use the as.matrix function, because the matrix is too large.
– Nutle
Nov 29 '18 at 15:30
|
show 3 more comments
Any idea whether this approach is indeed cheaper thanas.matrix %>% as.data.frameapproach? (colnames doesn't matter)
– Nutle
Nov 26 '18 at 18:17
also, in the first caseb %*% t(b)returns the following error:requires numeric/complex matrix/vector arguments. I don't see how can we avoidas.matrixhere
– Nutle
Nov 26 '18 at 18:21
Thanks. That is exactly what I was looking for!!!
– HowYaDoing
Nov 26 '18 at 19:54
@Nutle your comments are't really applicable here. As noted already by OP you seem to have mistaken that the question is about inverse matrices - it is not. Maybe consider deleting your comments in case they could inadvertently be misleading to other readers?
– dww
Nov 29 '18 at 15:15
I will cite the exact words from the OP's question:and I cannot use the as.matrix function, because the matrix is too large.
– Nutle
Nov 29 '18 at 15:30
Any idea whether this approach is indeed cheaper than
as.matrix %>% as.data.frame approach? (colnames doesn't matter)– Nutle
Nov 26 '18 at 18:17
Any idea whether this approach is indeed cheaper than
as.matrix %>% as.data.frame approach? (colnames doesn't matter)– Nutle
Nov 26 '18 at 18:17
also, in the first case
b %*% t(b) returns the following error:requires numeric/complex matrix/vector arguments. I don't see how can we avoid as.matrix here– Nutle
Nov 26 '18 at 18:21
also, in the first case
b %*% t(b) returns the following error:requires numeric/complex matrix/vector arguments. I don't see how can we avoid as.matrix here– Nutle
Nov 26 '18 at 18:21
Thanks. That is exactly what I was looking for!!!
– HowYaDoing
Nov 26 '18 at 19:54
Thanks. That is exactly what I was looking for!!!
– HowYaDoing
Nov 26 '18 at 19:54
@Nutle your comments are't really applicable here. As noted already by OP you seem to have mistaken that the question is about inverse matrices - it is not. Maybe consider deleting your comments in case they could inadvertently be misleading to other readers?
– dww
Nov 29 '18 at 15:15
@Nutle your comments are't really applicable here. As noted already by OP you seem to have mistaken that the question is about inverse matrices - it is not. Maybe consider deleting your comments in case they could inadvertently be misleading to other readers?
– dww
Nov 29 '18 at 15:15
I will cite the exact words from the OP's question:
and I cannot use the as.matrix function, because the matrix is too large. – Nutle
Nov 29 '18 at 15:30
I will cite the exact words from the OP's question:
and I cannot use the as.matrix function, because the matrix is too large. – Nutle
Nov 29 '18 at 15:30
|
show 3 more comments
Thanks for contributing an answer to Stack Overflow!
- Please be sure to answer the question. Provide details and share your research!
But avoid …
- Asking for help, clarification, or responding to other answers.
- Making statements based on opinion; back them up with references or personal experience.
To learn more, see our tips on writing great answers.
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53486135%2fconverting-a-dgcmatrix-to-data-frame%23new-answer', 'question_page');
}
);
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
for calculating inverse, as you mention,
solve()doesn't work?(a %*% t(a)) %>% solveseems to return asparseMatrixobject. Unless you need generalized inverse?– Nutle
Nov 26 '18 at 18:25
not a matrix inverse, the question I pointed to started with vectors to create a data frame, then created a dense matrix. I wanted to start with a sparse matrix, and get a data frame of (row,col,value). I want to invert his problem, not invert the matrix.
– HowYaDoing
Nov 26 '18 at 20:00
oh, I see. Still, it's an open question (for me) of how to use generic
matrixmethods (such asMASS::ginv, for example), withsparseMatrixobjects without resolving toas.matrix. I thought you were after a similar thing, but sadly the accepted answer does not solve it.– Nutle
Nov 26 '18 at 20:03