How to add VDJ clonotyping data to Seurat object of scRNA-seq
2
1
Entering edit mode
10 months ago
Akira ▴ 10

I have performed CITE-seq (ADT, GEX, TCR) in 20 PBMC samples, consisting of responders and non-responders. By following Seurat tutorial, I performed standard pre-processing process, merging seurat object, integration, and drew the UMAP and compared the freq. of each clusters between responders and non-responders.

I want to add the TCR data into meta data in order to investigate the TCR clonotype in each T cell populations (progenitor cluster, exhausted cluster, proliferating cluster), but I don't know how to add TCR data.

  • do I need to add TCR data in each samples before integraion?
  • or can I add TCR data to the seurat object after integration?

It would be appreciated if I can hear some advice on this issue. (Although I have checked the previous posting ; Tutorial:Associating VDJ clonotyping data with scRNA-seq in Seurat, I can't tell how to manage the code because I am a beginner)

scRNA-seq 10x single-cell TCR • 1.7k views
ADD COMMENT
1
Entering edit mode
10 months ago
Ming Tommy Tang ★ 3.9k

you can take a look at https://github.com/ncborcherding/scRepertoire

essentially, you add the v,d,j gene info and CDR3 info to the metadata slot of the seurat object. ScRepertorie has a function for that. My github repo may help too https://github.com/crazyhottommy/TCR-BCR-seq-analysis

ADD COMMENT
1
Entering edit mode

The TCR data will not affect your integration

ADD REPLY
0
Entering edit mode

Thank you for your kind comment, and I will learn more in your tutorial.

And it would be great to hear that adding TCR data can be done prior to or after the integration.

  1. When adding the TCR data into meta data of the Seurat object, can it be done with this code posted previously?

add_clonotype <- function(tcr_location, seurat_obj){ tcr <- read.csv(paste(tcr_folder,"filtered_contig_annotations.csv", sep="")) Associating VDJ clonotyping data with scRNA-seq in Seurat

  1. I am using Immunarch for TCR analysis (but I have not merge the data of GEX and TCR) . Does scRepertoire have more function rather than Immunarch ?

  2. I want to know whether each T cell is singlet or clonal T cell by looking at TCR data. If I want to know the frequency of clonal T cells in some specific T cell population (i.e., within exhausted T cells), do I need to add one more column in meta data for the information, singlet or clonal? Any suggestion would be appreciated.

ADD REPLY
1
Entering edit mode

Thought I would jump in here.

When adding the TCR data into meta data of the Seurat object, can it be done with this code posted previously?

You can use Jared's method for adding clonotype data to the meta data. The major barrier will be if you have more than one sequencing run and matching barcodes.

I am using Immunarch for TCR analysis (but I have not merge the data of GEX and TCR) . Does scRepertoire have more function rather than Immunarch ?

With the caveat that I am the author of scRepertoire - there is more interaction of GEX/TCR built into scRepertoire (as of now, Immunarch is planning on expanding support for single-cell objects in the future). I think Immunarch has more power in functions for statistical analysis of repertoire though.

I want to know whether each T cell is singlet or clonal T cell by looking at TCR data. If I want to know the frequency of clonal T cells in some specific T cell population (i.e., within exhausted T cells), do I need to add one more column in meta data for the information, singlet or clonal? Any suggestion would be appreciated.

For visualization purposes using Seurat/Bioconductor pipelines, that might be easiest. Once you have attached your clonotype information to the meta data (using whatever method), it should be easy to calculate clone abundance by grouping by sample and sequence, then using count() in dplyr. If you are using scRepertoire, that is done as part of the combineExpression() function for either a proportion or raw count of total repertoire.

ADD REPLY
0
Entering edit mode

Thank you for the great information!

The major barrier will be if you have more than one sequencing run and matching barcodes.

Actually, I am now struggling with renaming the column in the section of "Prepare combined Seurat objects", described in "Integrating VDJ sequencing data with Seurat".

I have the all samples-combined seurat object (sobj_All) after merging and integrating multiple seurat objects (sobj_All consist of sobj1, sobj2, sobj3, ..sobj10) [sobj; seurat object]. And I am trying to add TCR data into sobj_All.

For column renaming, I ran the code below, but errors come up.

sobj1 <- subset(sobj_All, sample_name == "sobj1") # filter "sobj1" from "sobj_All" colnames(sobj1) <- paste("sobj1", colnames(sobj1), sep = "_")

Error in dimnames(x) <- dn : 'dimnames' applied to non-array

I will think about using scRepertoire and function of "combineExpression" for this purpose.

ADD REPLY
0
Entering edit mode
10 months ago
Akira ▴ 10

Now I am trying to follow the tutorial as below. (Integrating VDJ sequencing data with Seurat)

=====================================================================

Prepare combined Seurat objects

n1_data <- Read10X("data/EXPIDX1/")

n2_data <- Read10X("data/EXPIDX2/")

colnames(n1_data) <- paste("n1", colnames(n1_data), sep = "_")

colnames(n2_data) <- paste("n2", colnames(n2_data), sep = "_")

=====================================================================

However, I can't solve the error below. I want to add "sobj1_" in front of the barcodes.

Seurat_4.3.0

sobj1; Large Seurat (3GB)

sobj1 consist of list of assays $RNA, $CITE, $SCT, $integrated, $ pca, $ umap

colnames(sobj1)

[1] "AAACCTGAGAGCTATA-1_2" "AAACCTGAGCCAACAG-1_2" "AAACCTGAGGCTACGA-1_2" "AAACCTGAGTATCGAA-1_2" "AAACCTGAGTCCATAC-1_2" [6] "AAACCTGAGTCCCACG-1_2"....

colnames(sobj1) <- paste("sobj1", colnames(sobj1), sep = "_")

Error in dimnames(x) <- dn : 'dimnames' applied to non-array

when I only ran this code [ paste("sobj1", colnames(sobj1), sep = "_") ], it would work.

paste("sobj1", colnames(sobj1), sep = "_")

[1] "sobj1_AAACCTGAGAGCTATA-1_2" "sobj1_AAACCTGAGCCAACAG-1_2" "sobj1_AAACCTGAGGCTACGA-1_2" "sobj1_AAACCTGAGTATCGAA-1_2" "sobj1_AAACCTGAGTCCATAC-1_2" [6] "sobj1_AAACCTGAGTCCCACG-1_2"....

Could you please give me an advice on this issue? I do appreciate your kind support.

ADD COMMENT

Login before adding your answer.

Traffic: 1841 users visited in the last hour
Help About
FAQ
Access RSS
API
Stats

Use of this site constitutes acceptance of our User Agreement and Privacy Policy.

Powered by the version 2.3.6