【问题标题】:Group columns based on information in an annotation matrix根据注释矩阵中的信息对列进行分组
【发布时间】:2017-09-11 20:52:54
【问题描述】:

我正在寻求一些关于如何完成以下任务的建议:

我正在分析单细胞 RNAseq 数据集。我在一个表中有我的标准化表达数据(每一列都有一个唯一的单元格 ID,每一行都是一个基因)。

我还有一个注释矩阵,里面有每个单元格的信息(每一行是一个单元格 ID,每一列是一条信息(例如患者 ID、站点等)

对于下游分析,我希望根据注释矩阵中的可用信息进行不同的分组。你们有什么建议我怎么能做到这一点????

比如我有这个

expression_matrix<-matrix(c(1:4), nrow = 4,ncol =4, dimnames = list(c("gene1", "gene2", "gene3", "gene4"),c("cell1","cell2","cell3","cell4")))

annotation_matrix<-matrix(c("1526","1788", "1526","1788","controller","noncontroller","controller","noncontroller","LN","PB","LN","PB"), nrow = 4,ncol =3, dimnames = list(c("cell1","cell2","cell3","cell4"),c("ID","Status","Site")))

我想根据“站点”进行分组,以便我可以将单元格 1 和 3 合并到一个组中,将单元格 2 和单元格 4 合并到另一组中。如何使用将注释矩阵中的信息匹配到 expression_matrix?

比如说,我想在控制器和非控制器之间进行比较,所以我需要以某种方式将 normalized_expression 表中的单元格 ID 与注释矩阵中可用的患者组信息相匹配

【问题讨论】:

  • 如果您能提供一个reproducible example,这将很有帮助,其中包含您迄今为止所尝试的数据示例和代码。

标签: r matrix dplyr


【解决方案1】:
expression_matrix<-matrix(c(1:4), nrow = 4,ncol =4, dimnames = list(c("gene1", "gene2", "gene3", "gene4"),c("cell1","cell2","cell3","cell4")))

#       cell1 cell2 cell3 cell4
# gene1     1     1     1     1
# gene2     2     2     2     2
# gene3     3     3     3     3
# gene4     4     4     4     4

annotation_matrix<-matrix(c("1526","1788", "1526","1788","controller","noncontroller","controller","noncontroller","LN","PB","LN","PB"), nrow = 4,ncol =3, dimnames = list(c("cell1","cell2","cell3","cell4"),c("ID","Status","Site")))

#       ID     Status          Site
# cell1 "1526" "controller"    "LN"
# cell2 "1788" "noncontroller" "PB"
# cell3 "1526" "controller"    "LN"
# cell4 "1788" "noncontroller" "PB"

让我们协调这些

library(dplyr)

expression_df <- expression_matrix %>%
  as.data.frame(stringsAsFactor=F) %>%
  mutate(gene = rownames(.)) %>%
  gather(cell,value,-gene)

#     gene  cell value
# 1  gene1 cell1     1
# 2  gene2 cell1     2
# 3  gene3 cell1     3
# 4  gene4 cell1     4
# 5  gene1 cell2     1
# 6  gene2 cell2     2
# 7  gene3 cell2     3
# 8  gene4 cell2     4
# 9  gene1 cell3     1
# 10 gene2 cell3     2
# 11 gene3 cell3     3
# 12 gene4 cell3     4
# 13 gene1 cell4     1
# 14 gene2 cell4     2
# 15 gene3 cell4     3
# 16 gene4 cell4     4

annotation_df <- annotation_matrix %>%
  as.data.frame(stringsAsFactor=F) %>%
  mutate(cell = rownames(.))

#     ID        Status Site  cell
# 1 1526    controller   LN cell1
# 2 1788 noncontroller   PB cell2
# 3 1526    controller   LN cell3
# 4 1788 noncontroller   PB cell4

现在您可以根据需要轻松过滤、合并、传播

example1 <- annotation_df %>%
  filter(Site == "LN") %>%
  inner_join(expression_df)

#     ID     Status Site  cell  gene value
# 1 1526 controller   LN cell1 gene1     1
# 2 1526 controller   LN cell1 gene2     2
# 3 1526 controller   LN cell1 gene3     3
# 4 1526 controller   LN cell1 gene4     4
# 5 1526 controller   LN cell3 gene1     1
# 6 1526 controller   LN cell3 gene2     2
# 7 1526 controller   LN cell3 gene3     3
# 8 1526 controller   LN cell3 gene4     4

example2 <- example1 %>%
  spread(gene,value)

#     ID     Status Site  cell gene1 gene2 gene3 gene4
# 1 1526 controller   LN cell1     1     2     3     4
# 2 1526 controller   LN cell3     1     2     3     4

【讨论】:

    猜你喜欢
    • 2013-02-16
    • 1970-01-01
    • 2015-10-12
    • 1970-01-01
    • 2019-03-28
    • 2015-01-17
    • 2016-01-23
    • 1970-01-01
    相关资源
    最近更新 更多