如何解决是否可以根据条形码从一个样本中合并 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 举报,一经查实,本站将立刻删除。