如何将多个相同类型的pdata身份添加到一个样本中,并在绘图时能够通过这些身份进行区分

How to add multiple pdata identities of same type to one sample, and be able to distinguish by those identities when plotting

我正在尝试将表型信息 (pdata) 添加到此数据集中的样本中。

library(BiocManager)
library(GEOquery) 
library(plyr)
library(dplyr) 
library(Matrix) 
library(Seurat) 

# Loading Raw Data into RStudio ---------------------------------- 
    
    filePaths = getGEOSuppFiles("GSE118389") 
    tarF <- list.files(path = "./GSE118389/", pattern = "*.tar", full.names = TRUE) 
    untar(tarF, exdir = "./GSE118389/") 
    gzipF <- list.files(path = "./GSE118389/", pattern = "*.gz", full.names = TRUE) 
    ldply(.data = gzipF, .fun = gunzip) 
    
    list.files(path = "./GSE118389/", full.names = TRUE)

我按以下方式加载患者 39 (PT039) 的样本信息:

# Load in full matrix ----------------------------------------------------------

fullmat <- read.table(file = './GSE118389//GSE118389_counts_rsem.txt', 
                      sep = '\t', header = TRUE, stringsAsFactors = FALSE)


# Load in PT039 matrix -----------------------------------------------------------
PT039mat <- grep(pattern =c("^PT039") , x = colnames(fullmat), value = TRUE)
PT039mat = fullmat[,grepl(c("^PT039"),colnames(fullmat))]
PT039mat[1:5,1:5]

然后我按以下方式添加关联的 pdata,本质上是在 PT039mat 之外创建一个单独的数据帧,稍后将作为 pdata 添加到 Seurat 对象中:

PT039pdat <- data.frame("samples" = colnames(PT039mat), 
                        "lymphovascular_invasion" = "no", 
                        "nodal_involvement" = "no",
                        "BRCA_status" = "BRCA-")

这将创建以下内容:

我可能想错了,但我有以下信息,PT039 存在于多个批次中。我想基本上将这个确切的数据框重新创建到 PT039pdat:

Batch   Patient ID
B1        PT039 
B2        PT058
B3        PT039, PT081, PT089
B4        PT081
B5        PT084, PT089
B6        PT084, PT089
B7        PT126
B8        PT039, PT084
B9        PT039

我可以使用以下代码完全做到这一点:

PT039_batch <- list(c("B1", "B3", "B8", "B9"))
PT039pdat$batch <- PT039_batch

但是当我尝试在 UMAP 上绘制不同的批次时,它无法检测到单独的可能性,如果这有意义的话。

DimPlot(sobj, reduction = "umap", split.by = "batch")

Error in `[<-.data.frame`(`*tmp*`, , split.by, value = c(PT039_P11_A01_S1 = "B1",  : 
  replacement has 3538 rows, data has 1325

我希望能够创建这个,但是批次信息按 B1、B2、B3 等拆分。

对不起,问题很长,但感谢您的阅读!

参见 https://github.com/satijalab/seurat/issues/4650。如果我想按照我现在的方式绘制它,看起来我需要每个单元格的批次信息。