【问题标题】:Exporting Seurat Object Data by Cluster按集群导出 Seurat 对象数据
【发布时间】:2021-03-20 16:10:06
【问题描述】:

我正在使用 Seurat 执行单细胞分析,并且有兴趣导出每个集群中所有细胞的数据。我尝试使用下面的代码,但没有成功。

我的 Seurat 对象名为 Patients。我还附上了我的 Seurat 对象的屏幕截图。我正在寻找提取所有集群(即Ductal1Macrophage1Macrophage2 等...)

meta.data.cluster <- unique(x = Patients@meta.data$active.ident)

for(group in meta.data.cluster) {
  group.cells <- WhichCells(object = Patients, subset.name = "active.ident" , accept.value = group)
  data_to_write_out <- as.data.frame(x = as.matrix(x = Patients@raw.data[, group.cells]))
  write.csv(x = data_to_write_out, row.names = TRUE, file = paste0(save_dir,"/",group, "_cluster_outfile.csv"))
}

我是 R 和编码的新手,非常感谢任何帮助! :)

【问题讨论】:

    标签: r export-to-csv seurat


    【解决方案1】:

    它不起作用,因为您的元数据下没有 active.ident 列。例如,如果我们使用像您这样的示例数据集并设置 ident:

    library(Seurat)
    
    M = matrix(rnbinom(5000,mu=20,size=1),ncol=50)
    colnames(M) = paste0("P",1:50)
    rownames(M) = paste0("gene",1:100)
    
    Patients = CreateSeuratObject(M)
    Patients$grp = sample(c("Ductal1","Macrophage1","Macrophage2"),50,replace=TRUE)
    Idents(Patients) = Patients$grp
    

    你可以看到这行代码没有给你任何价值:

    meta.data.cluster <- unique(x = Patients@meta.data$active.ident)
    meta.data.cluster
    NULL
    

    你可以这样做:

    meta.data.cluster <- unique(Idents(Patients))
    
    for(group in meta.data.cluster) {
      group.cells <- WhichCells(object = Patients, idents = group)
      data_to_write_out <- as.data.frame(GetAssayData(Patients,slot = 'counts')[,group.cells])
      write.csv(data_to_write_out, row.names = TRUE, file = paste0(save_dir,"/",group, "_cluster_outfile.csv"))
    }
    

    请注意,您还可以使用 GetAssayData 计算出计数。您可以对一组进行子集化并这样写出:

    wh <- which(Idents(Patients) =="Macrophage1" )
    da = as.data.frame(GetAssayData(Patients,slot = 'counts')[,wh])
    write.csv(da,...)
    

    【讨论】:

    • 谢谢!也很好奇,如果我只想选择一个细胞簇(即巨噬细胞 1),有没有办法使用函数 WhichCells 进行子集化?现在我只得到 1 个 .csv 文件,我相信它包含所有集群
    • meta.data.cluster
    • 这是我目前的代码。由于某种原因,输出文件似乎没有对集群进行子集化?我应该在哪里放置 wh = which(Idents(Patients) == "Macrophage1") ;患者[,w] ?对不起,我是编码新手 :(
    • 好的,代码可以工作。 “由于某种原因,输出文件似乎没有对集群进行子集化?”不知道这会是什么,因为我看不到您的数据。如果你读入输出 csv,你应该得到与适合它的单元格数相同的列数
    猜你喜欢
    • 2022-07-07
    • 1970-01-01
    • 2022-09-25
    • 2011-11-30
    • 2021-11-05
    • 1970-01-01
    • 1970-01-01
    • 2022-08-17
    • 1970-01-01
    相关资源
    最近更新 更多