【问题标题】:convert a list to data frame without messing with data将列表转换为数据框而不弄乱数据
【发布时间】:2022-01-25 07:54:16
【问题描述】:

我有一个这样的列表数据

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
 

【问题讨论】:

  • 如果您使用的库不在默认环境中,请始终将它们包含在您的问题中。

标签: r sparse-matrix


【解决方案1】:

这里有几个问题。首先,调用as.data.frame(myd) 其中myd 是一个类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 方法以及为matrix 类定义的as.data.frame 方法。因此,如果您的最佳行动方案真的是在 dgTMatrixdata.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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-04-15
    • 2020-01-15
    • 1970-01-01
    • 2011-05-12
    • 2013-09-26
    相关资源
    最近更新 更多