如何重塑数据帧,然后将其转换为dgCMatrix?

如何重塑数据帧,然后将其转换为dgCMatrix?,r,dataframe,multiple-columns,sparse-matrix,reshape,R,Dataframe,Multiple Columns,Sparse Matrix,Reshape,我有一个如下所示的数据帧(行名是“1”、“2”、“3”…)。由于每列中都有非唯一的条目,因此我无法将它们中的任何一个指定为行名 gene cell count a c1 1 a c2 1 a c3 4 b c1 3 b c2 1 b c3 1 f c1 3 d c8 9 e c11 1 在每个细胞中测量每个基因(意味着它们在计数列中有一个值),但不显示零计数(例如,基因“a”在细胞c8和c

我有一个如下所示的数据帧(行名是“1”、“2”、“3”…)。由于每列中都有非唯一的条目,因此我无法将它们中的任何一个指定为行名

gene cell count
a    c1    1
a    c2    1
a    c3    4
b    c1    3
b    c2    1
b    c3    1
f    c1    3
d    c8    9
e    c11   1
在每个细胞中测量每个基因(意味着它们在计数列中有一个值),但不显示零计数(例如,基因“a”在细胞c8和c11中有零计数,因此不显示)

现在,我想按照以下安排将数据帧重塑/转换为dgCMatrix

(基因作为行名称,单元格作为列名,计数值作为数据点)

其中“.”对应于零计数


我在这里的许多帖子中都提到过重塑、重塑2、as.matrix,但都没有成功。

首先转换为长格式并将gene列设置为rownames:

library(Matrix)
library(dplyr)
library(tidyr)

mat <- df %>% pivot_wider(id_cols = gene,values_from = count,names_from = cell,
values_fill = list(count=0)) %>% tibble::column_to_rownames("gene")

谢谢。这正是我想要的。真的很有帮助!酷。很高兴它对您有用:)
library(Matrix)
library(dplyr)
library(tidyr)

mat <- df %>% pivot_wider(id_cols = gene,values_from = count,names_from = cell,
values_fill = list(count=0)) %>% tibble::column_to_rownames("gene")
mat = Matrix(as.matrix(mat),sparse=TRUE)

    5 x 5 sparse Matrix of class "dgCMatrix"
  c1 c2 c3 c8 c11
a  1  1  4  .   .
b  3  1  1  .   .
f  3  .  .  .   .
d  .  .  .  9   .
e  .  .  .  .   1