我试图将患者级元数据添加到现有的Seurat
对象。这包括每个参与者的生化信息,如血糖、HsCRP、BMI等。我如何将这些数据添加到我的Seurat
对象中,以便它与每个参与者ID正确对齐?
我试着运行这个,它不工作:
library(Seurat)
#extract BMI into a numeric variable
BMI <- Donor_parameters$BMI
#add donor names to BMI
names(BMI) <- colnames(seurat_obj$Donor)
#Add metadata to existing object
seurat_obj <- AddMetaData(
object = seurat_obj,
metadata = BMI,
col.name = 'BMI')
Seurat对象中的元数据有多少行就有多少单元格。要看它是什么样子,你可以使用head(seurat_obj[[]])
。请注意,如果对数据进行了过滤,则单元格的数量可能与原始原始数据中的数量不同,因此,如果对每个单元格都有额外的注释数据,则它可能与Seurat对象中的数据不匹配。
要添加的数据必须具有与Seurat元数据相同的row.names
,通常是单元格条形码。如果条形码是附加数据中的一个变量,您可以这样做:
row.names(Donor_parameters) <- Donor_parameters$Barcode
seurat_obj <- AddMetaData(seurat_obj, metadata = Donor_parameters)
如果附加数据有一个标识变量(这里称为Pat_id
),该变量也存在于Seurat元数据中,您可以这样做:
library(dplyr)
add_data <- left_join(seurat_obj[["Pat_id"]], Donor_parameters)
row.names(add_data) <- row.names(seurat_obj[[]])
seurat_obj <- AddMetaData(seurat_obj, metadata = add_data)
一个玩具的例子:
library(dplyr)
library(Seurat)
# Data is from https://cf.10xgenomics.com/samples/cell/pbmc3k/pbmc3k_filtered_gene_bc_matrices.tar.gz
pbmc.data <- Read10X(data.dir = "temp/filtered_gene_bc_matrices/hg19/")
pbmc <- CreateSeuratObject(counts = pbmc.data,
project = "pbmc3k",
min.cells = 3,
min.features = 200)
# Create a grouping variable
pbmc <- AddMetaData(pbmc,
metadata = sample(c("A", "B", "C"),
size = ncol(pbmc),
replace = TRUE),
col.name = "Group")
# Metadata for the groups
meta <- data.frame(Group = c("B", "A", "C"),
Desc = c("Second", "First", "Third"))
add_data <- left_join(pbmc[["Group"]], meta)
row.names(add_data) <- row.names(pbmc[[]])
pbmc <- AddMetaData(pbmc, metadata = add_data)