我有一個這樣的串列資料
library(Matrix)
myd<- new("dgTMatrix", i = c(3L, 4L, 4L), j = 0:2, Dim = c(5L, 3L),
Dimnames = list(c("Xkr4", "Rp1", "Sox17", "Mrpl15", "Lypla1"
), c("AAAGTAGAGATGCCAG-1", "AACCGCGTCCAACCAA-1", "AACTCCCGTCGGGTCT-1"
)), x = c(1, 2, 1), factors = list())
我更喜歡使用資料框而不是串列,所以我試圖將它轉換為資料框,但我不確定我是否正在破壞結構
我只是做
mydf <- as.data.frame(myd)
然后它變成這樣
mydf<- structure(list(`AAAGTAGAGATGCCAG-1` = c(0, 0, 0, 1, 0), `AACCGCGTCCAACCAA-1` = c(0,
0, 0, 0, 2), `AACTCCCGTCGGGTCT-1` = c(0, 0, 0, 0, 1)), class = "data.frame", row.names = c("Xkr4",
"Rp1", "Sox17", "Mrpl15", "Lypla1"))
您認為有更安全的方法來轉換此類資料嗎?
我試圖理解資料,所以如果我理解unlist它,它將如下所示,但我仍然不確定轉換
unlist(myd)
5 x 3 sparse Matrix of class "dgTMatrix"
AAAGTAGAGATGCCAG-1 AACCGCGTCCAACCAA-1 AACTCCCGTCGGGTCT-1
Xkr4 . . .
Rp1 . . .
Sox17 . . .
Mrpl15 1 . .
Lypla1 . 2 1
uj5u.com熱心網友回復:
這里有幾個問題。首先,呼叫as.data.frame(myd)where mydis an object with classdgTMatrix會引發錯誤,如下所示:
library(Matrix)
myd<- new("dgTMatrix", i = c(3L, 4L, 4L), j = 0:2, Dim = c(5L, 3L),
Dimnames = list(c("Xkr4", "Rp1", "Sox17", "Mrpl15", "Lypla1"
), c("AAAGTAGAGATGCCAG-1", "AACCGCGTCCAACCAA-1", "AACTCCCGTCGGGTCT-1"
)), x = c(1, 2, 1), factors = list())
as.data.frame(myd)
#> Error in as.data.frame.default(myd): cannot coerce class 'structure("dgTMatrix", package = "Matrix")' to a data.frame
這樣做的原因是沒有as.data.frame為 定義方法dgTMatrix。但是,有一個as.matrix為 定義的方法dgTMatrix以及一個as.data.frame為 class 定義的方法matrix。所以,如果你最好的行動方案真的是在dgTMatrix和之間轉換data.frame(我覺得可能不是),你可能想要做這樣的事情:
library(Matrix)
myd<- new("dgTMatrix", i = c(3L, 4L, 4L), j = 0:2, Dim = c(5L, 3L),
Dimnames = list(c("Xkr4", "Rp1", "Sox17", "Mrpl15", "Lypla1"
), c("AAAGTAGAGATGCCAG-1", "AACCGCGTCCAACCAA-1", "AACTCCCGTCGGGTCT-1"
)), x = c(1, 2, 1), factors = list())
mydf <- as.data.frame(as.matrix(myd))
mydf
#> AAAGTAGAGATGCCAG-1 AACCGCGTCCAACCAA-1 AACTCCCGTCGGGTCT-1
#> Xkr4 0 0 0
#> Rp1 0 0 0
#> Sox17 0 0 0
#> Mrpl15 1 0 0
#> Lypla1 0 2 1
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/393447.html
