Как изменить форму и затем преобразовать фрейм данных в dgCMatrix? - PullRequest
1 голос
/ 12 февраля 2020

У меня есть фрейм данных, подобный следующему (имена строк: «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 со следующим расположением

(гены как имена строк, ячейки как имена столбцов и значения счетчиков как точки данных)

   c1  c2  c3  c8  c11 
a  1   1   4   .    .
c  3   1   1   .    . 

где "." соответствует нулевому количеству.

Я пытался изменить, reshape2, as.matrix, как упоминалось во многих сообщениях здесь, но безуспешно.

1 Ответ

1 голос
/ 12 февраля 2020

Вы преобразуете в длинный формат и устанавливаете столбец гена сначала как имена строк:

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")

Затем в sparseMatrix:

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
...