我根据一些基因将我的seurat对象分成两个对象,并对它们进行了分析,现在我想根据它们的原始细胞重新合并它们,但当我合并它们时,条形码发生了变化,我有两个不同索引的一个细胞的条形码。
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
但是我从合并数据中得到的结果是: merge(object1,object2)
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
发布于 2021-07-25 19:55:23
您可以使用tidyverse
-approach:
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", "SeuratProject", "SeuratProject", "SeuratProject"
), nCount_RNA = c(181, 153, 171, 70, 224, 758), nFeature_RNA = c(71,
70, 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(), class = c("collector_character",
"collector")), nCount_RNA = structure(list(), class = c("collector_double",
"collector")), nFeature_RNA = structure(list(), class = c("collector_double",
"collector"))), default = structure(list(), class = c("collector_guess",
"collector")), skip = 1L), class = "col_spec"))
object2 <- structure(list(orig.ident = c("alive_14", "alive_14", "alive_14",
"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_, NA_character_, NA_character_),
expected = c("4 columns", "4 columns", "4 columns", "4 columns",
"4 columns"), actual = c("5 columns", "5 columns", "5 columns",
"5 columns", "5 columns"), file = c("literal data", "literal data",
"literal data", "literal data", "literal data")), row.names = c(NA,
-5L), class = c("tbl_df", "tbl", "data.frame")), 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(), class = c("collector_character",
"collector")), nCount_RNA = structure(list(), class = c("collector_double",
"collector")), nFeature_RNA = structure(list(), class = c("collector_double",
"collector"))), default = structure(list(), class = c("collector_guess",
"collector")), skip = 1L), class = "col_spec"))
发布于 2021-08-04 09:40:12
问题是,您需要在两个不同的数据集之间保留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?)
一种更简单的解决方案可能是重新导入数据,因为除非您将一个数据集投影到另一个数据集上,否则两个数据集之间的任何降维都是不可比较的。然后,您可以将两个分析中的任何相关元数据添加到新导入的对象中。
https://stackoverflow.com/questions/68519679
复制