This is a test version of Biostars. For the public version, visit https://www.biostars.org.
Subset cells in Seurat data based on reads and gene expression

Hello,

I have a question about how I can find all cells that have at least one read mapped to any of these 8 activity-dependent genes: OSTN, BDNF, FOS, NPAS4, EGR1, LINC00473, ZNF331, PER1 using the Seurat R package.

I have a seurat object that I have subsetted out to include only clusters that have genes expressed in excitatory neurons.

seurat.obj_combined_filtered_excitatiory <- subset(seurat.obj_combined_filtered, idents = c(0, 1, 3, 4, 5, 6, 8, 11, 14, 15, 16, 19, 20))

The next thing I want to do is from seurat.obj_combined_filtered_excitatiory object I want to find all cells/cell barcodes that have at least one read or UMI that maps to any one of the 8 activity-dependent genes listed above. In other words I want to generate a list of cell barcodes that express the 8 genes above. I tried doing this but I'm getting an error

seurat.obj_combined_filtered_active <- subset(seurat.obj_combined_filtered_excitatiory, cells = nCount_RNA > 1 & features = c("OSTN", "BDNF", "FOS", "NPAS4", "EGR1", "LINC00473", "ZNF331", "PER1"))
Error: unexpected '=' in "seurat.obj_combined_filtered_active <- subset(seurat.obj_combined_filtered_excitatiory, cells = nCount_RNA > 1 & features ="

Is this the right way to approach this? Is there another way I can do this? Should I be using the feature barcode matrix in the Seurat object instead? I would like to further subset `seurat.obj_combined_filtered_excitatiory' and then return a list of cell barcodes that meet this criteria.

Then after this I would like to use the findAllMarkers function to find DEG between seurat.obj_combined_filtered_active & seurat.obj_combined_filtered_excitatiory. Is this possible? Or can I only use the findAllMarkers() function with only one seurat object at a time?

Any help with this will be much appreciated!

seurat

2 answers

The next thing I want to do is from seurat.obj_combined_filtered_excitatiory object I want to find all cells/cell barcodes that have at least one read or UMI that maps to any one of the 8 activity-dependent genes listed above. In other words I want to generate a list of cell barcodes that express the 8 genes above. I tried doing this but I'm getting an error

#First check if your genes of interest are present in your Seurat object or not:
genes_of_interest <- c("OSTN", "BDNF", "FOS", "NPAS4", "EGR1", "LINC00473", "ZNF331", "PER1")
genes_in_data <- genes_of_interest[genes_of_interest %in% rownames(obj_combined_filtered_excitatiory)]
print(genes_in_data)

#You can then subset the Seurat object for your genes of interest
subset_data <- obj_combined_filtered_excitatiory[genes_in_data, ]

 #Then get cells or cell barcodes that expressed these genes:
cells_with_expression <- colnames(subset_data)[colSums(subset_data@assays$RNA@counts) > 0]
print(cells_with_expression)

Hi, thanks for your response! I tried your solution, but I got errors unfortunately. Is there something I'm missing?

genes_of_interest <- c("OSTN", "BDNF", "FOS", "NPAS4", "EGR1", "LINC00473", "ZNF331", "PER1")
genes_in_data <- genes_of_interest[genes_of_interest %in% rownames(seurat.obj_combined_filtered_excitatiory)]
print(genes_in_data)
seurat.obj_combined_filtered_active <- seurat.obj_combined_filtered_excitatiory[genes_in_data, ]

I viewed subsetted seurat object of excitatory clusters

seurat.obj_combined_filtered_active

# An object of class Seurat 
# 8 features across 39702 samples within 1 assay 
# Active assay: RNA (8 features, 0 variable features)
#  3 layers present: counts, data, scale.data
#  2 dimensional reductions calculated: pca, umap

But it isn't subsetted? It has the same number of cells as seurat.obj_combined_filtered_excitatiory

I then ran these lines but got these errors

cells_with_expression <- colnames(seurat.obj_combined_filtered_active)[colSums(seurat.obj_combined_filtered_active@assays$RNA@counts) > 0]
print(cells_with_expression)

# Error in h(simpleError(msg, call)) : 
#   error in evaluating the argument 'x' in selecting a method for function 'colSums': no slot of name "counts" for this object of class "Assay5"
# 
# Error in print(cells_with_expression) : 
#   object 'cells_with_expression' not found

Could you check what layers are present in your Seurat object?

DefaultAssay(seurat.obj_combined_filtered_excitatiory) <- "RNA"
Layers(seurat.obj_combined_filtered_active)

If it is not counts, it may be data. And you may need to replace counts with data in the above function-

Hi, yes I did but I got the same error

 Error in h(simpleError(msg, call)) : 
 error in evaluating the argument 'x' in selecting a method for function 'colSums': no slot of name "data" for this object of class "Assay5"

Hi, I've now figured this out. You can just use the WhichCells Seurat function which returns a list of cell barcodes what match a certain criteria.

active_cells_excitatory_subset <- WhichCells(object = seurat.obj_combined_filtered_excitatiory, expression = OSTN > 0 | BDNF > 0 | FOS > 0 | NPAS4 > 0 | EGR1 > 0 | LINC00473 > 0 | ZNF331 > 0 | PER1 > 0, slot = 'counts')

Log in to answer this question.