微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

是否可以根据条形码从一个样本中合并 2 个 seurat 对象?

如何解决是否可以根据条形码从一个样本中合并 2 个 seurat 对象?

我根据一些基因将我的 seurat 对象分成 2 个对象,并分析它们,现在我想根据它们的原始细胞再次合并它们,但是当我合并它们时,条形码发生了变化,我有 2 个条形码具有不同索引的单元格。

object1@Meta.data:

                        orig.ident nCount_RNA nFeature_RNA
AAAGTCCTCCCTGGTT_1_1 SeuratProject        181           71
AACACACTCTAGATCG_1_1 SeuratProject        153           70
AATAGAGGTGACGCCT_1_1 SeuratProject        171           69
ACTCCCAAGAGGCTGT_1_1 SeuratProject         70           41
AGATCCAAGGGCGAAG_1_1 SeuratProject        224           85
AGGTCATCAGAACTCT_1_1 SeuratProject        758          192

object2@Meta.data

                     orig.ident nCount_RNA nFeature_RNA 
AAAGTCCTCCCTGGTT_1_1   alive_14        231          158  
AACACACTCTAGATCG_1_1   alive_14        245          148  
AATAGAGGTGACGCCT_1_1   alive_14        275          179  
ACTCCCAAGAGGCTGT_1_1   alive_14        344          193  
AGATCCAAGGGCGAAG_1_1   alive_14        355          194  
AGGTCATCAGAACTCT_1_1   alive_14        397          245 

我正在寻找的结果:

                     orig.ident nCount_RNA nFeature_RNA 
AAAGTCCTCCCTGGTT_1_1   alive_14        412          229         
AACACACTCTAGATCG_1_1   alive_14        398          218         
AATAGAGGTGACGCCT_1_1   alive_14        446          248        
ACTCCCAAGAGGCTGT_1_1   alive_14        414          234         
AGATCCAAGGGCGAAG_1_1   alive_14        579          279         
AGGTCATCAGAACTCT_1_1   alive_14       1155          437  

但是我从合并数据中得到的结果是: 合并(对象 1,对象 2)

                       orig.ident nCount_RNA nFeature_RNA 
AAAGTCCTCCCTGGTT_1_1_1   alive_14        231          158  
AACACACTCTAGATCG_1_1_1   alive_14        245          148  
AATAGAGGTGACGCCT_1_1_1   alive_14        275          179  
ACTCCCAAGAGGCTGT_1_1_1   alive_14        344          193  
AGATCCAAGGGCGAAG_1_1_1   alive_14        355          194  
AGGTCATCAGAACTCT_1_1_1   alive_14        397          245   

解决方法

您可以使用 tidyverse 方法:

library(tibble)
library(dplyr)

bind_rows(rownames_to_column(object1),rownames_to_column(object2)) %>% 
  group_by(rowname) %>% 
  summarise(nCount_RNA = sum(nCount_RNA),nFeature_RNA = sum(nFeature_RNA)) %>% 
  mutate(orig.ident = "alive_14",.before = 2)

给你

# A tibble: 6 x 4
  rowname              orig.ident nCount_RNA nFeature_RNA
  <chr>                <chr>           <dbl>        <dbl>
1 AAAGTCCTCCCTGGTT_1_1 alive_14          412          229
2 AACACACTCTAGATCG_1_1 alive_14          398          218
3 AATAGAGGTGACGCCT_1_1 alive_14          446          248
4 ACTCCCAAGAGGCTGT_1_1 alive_14          414          234
5 AGATCCAAGGGCGAAG_1_1 alive_14          579          279
6 AGGTCATCAGAACTCT_1_1 alive_14         1155          437

数据

object1 <- structure(list(orig.ident = c("SeuratProject","SeuratProject","SeuratProject"
),nCount_RNA = c(181,153,171,70,224,758),nFeature_RNA = c(71,69,41,85,192)),class = "data.frame",row.names = c("AAAGTCCTCCCTGGTT_1_1","AACACACTCTAGATCG_1_1","AATAGAGGTGACGCCT_1_1","ACTCCCAAGAGGCTGT_1_1","AGATCCAAGGGCGAAG_1_1","AGGTCATCAGAACTCT_1_1"),spec = structure(list(
    cols = list(id = structure(list(),class = c("collector_character","collector")),orig.ident = structure(list(),nCount_RNA = structure(list(),class = c("collector_double",nFeature_RNA = structure(list(),"collector"))),default = structure(list(),class = c("collector_guess",skip = 1L),class = "col_spec"))
object2 <- structure(list(orig.ident = c("alive_14","alive_14","alive_14"),nCount_RNA = c(231,245,275,344,355,397),nFeature_RNA = c(158,148,179,193,194,245)),problems = structure(list(row = 1:5,col = c(NA_character_,NA_character_,NA_character_),expected = c("4 columns","4 columns","4 columns"),actual = c("5 columns","5 columns","5 columns"),file = c("literal data","literal data","literal data")),row.names = c(NA,-5L),class = c("tbl_df","tbl","data.frame")),class = "col_spec"))
,

问题是您需要在两个不同数据集之间使用 Seurat 对象保留什么?对于数据槽 (seurat[[assay]]@counts),您可以使用 rbind 将两个矩阵行绑定在一起。 (请谨慎合并归一化值,如果这会违反任何假设)。

接下来对于降维和图形,您可以通过将降维或图形从一个对象拉入新的 Seurat 对象来将它们放入插槽中。

这里有一些伪代码可以提供帮助(我使用 V3,但如果您使用 V2,只需更改插槽名称)

merge_data <- rbind(object1[[assay]]@counts,object2[[assay]]@counts)
# repeat for other slots/assays (maybe write a function?)

metadata <- rbind(object1[[]],object2[[]])

seurat_merge <- CreateSeuratObject(counts = merge_data,meta.data = metadata)

# Place dim_reds
seurat_merge[["UMAP_object1"]] <- object1[["UMAP"]]
# repeat for more reductions (maybe write a function?)

一个更简单的解决方案可能只是重新导入数据,因为除非您将一个数据集投影到另一个数据集上,否则两个数据集之间的任何降维都不具有可比性。然后,您可以将这两个分析中的任何相关元数据添加到新导入的对象中。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。