将列表转换为数据框而不弄乱数据
convert a list to data frame without messing with data
我有这样的列表数据
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
这里有几个问题。首先,调用 as.data.frame(myd)
其中 myd
是具有 class dgTMatrix
的对象会引发错误,如下所示:
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
这是因为没有为 dgTMatrix
定义的 as.data.frame
方法。但是,为 dgTMatrix
定义了一个 as.matrix
方法,为 class matrix
定义了一个 as.data.frame
方法。所以,如果你最好的行动方案真的是在 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
我有这样的列表数据
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
这里有几个问题。首先,调用 as.data.frame(myd)
其中 myd
是具有 class dgTMatrix
的对象会引发错误,如下所示:
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
这是因为没有为 dgTMatrix
定义的 as.data.frame
方法。但是,为 dgTMatrix
定义了一个 as.matrix
方法,为 class matrix
定义了一个 as.data.frame
方法。所以,如果你最好的行动方案真的是在 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