Published January 7, 2026 | Version v3

Single-cell transcriptomics of melanoma sentinel lymph nodes identifies immune cell signatures associated with metastasis

Authors/Creators

Description

Cell-level raw counts for RNA and ADT (cell-surface protein) expression. A seurat object can be created from these files in R, for example:


## 1. libraries --------------------------------------------------------------
if (!requireNamespace("Seurat", quietly = TRUE))  stop("install.packages('Seurat')")
if (!requireNamespace("Matrix",  quietly = TRUE)) stop("install.packages('Matrix')")
if (!requireNamespace("data.table", quietly = TRUE)) install.packages("data.table")

library(data.table)
library(Seurat)
library(data.table)

## check versions
pkgs <- c("Seurat", "data.table", "Matrix")
v <- vapply(pkgs, function(p) as.character(packageVersion(p)), character(1))
print(v)
# Seurat data.table     Matrix 
# "5.0.0"   "1.14.8"    "1.6.3" 

## 2. helper to read a MatrixMarket triple + row/col names --------------------

read_mtx <- function(mtx_path, row_csv, barcode_csv) {
  mat <- Matrix::readMM(mtx_path)

  rows <- data.table::fread(row_csv, header = FALSE)[[1]]
  if (length(rows) == nrow(mat) + 1) rows <- rows[-1]          # drop header
  stopifnot(length(rows) == nrow(mat))

  cols <- data.table::fread(barcode_csv, header = FALSE)[[1]]
  if (length(cols) == ncol(mat) + 1) cols <- cols[-1]          # drop header
  stopifnot(length(cols) == ncol(mat))

  rownames(mat) <- rows
  colnames(mat) <- cols
  mat
}

## 3. load counts and metadata ----------------------------------------------
rna_counts <- read_mtx("RNA_counts.mtx",  "RNA_genes.csv",  "RNA_barcodes.csv")
adt_counts <- read_mtx("ADT_counts.mtx", "ADT_features.csv","RNA_barcodes.csv")   # same barcodes
meta       <- data.table::fread("seurat_metadata_full.csv", data.table = FALSE)
rownames(meta) <- colnames(rna_counts)   # ensure 1-to-1 alignment

## 4. build Seurat object ----------------------------------------------------
seu <- Seurat::CreateSeuratObject(
  counts   = rna_counts,
  assay    = "RNA",
  project  = "Rebuilt",
  meta.data = meta
)

# add ADT as a separate assay
adt_assay <- Seurat::CreateAssayObject(counts = adt_counts)
Seurat::DefaultAssay(adt_assay) <- "ADT"
seu[["ADT"]] <- adt_assay

# tidy up
Seurat::Key(seu[["ADT"]]) <- "adt_"
Seurat::DefaultAssay(seu)  <- "RNA"

## 5. save -------------------------------------------------------------------
saveRDS(seu, file = "seurat_rebuilt.rds")

# peek at first 5×5 slice of RNA & ADT count layers

## RNA -----------------------------------------------------------------------
rna_slice <- Seurat::GetAssayData(seu[["RNA"]], layer = "counts")[1:5, 1:5]
cat("\n── RNA (first 5 genes × 5 cells) ──\n")
print(as.matrix(rna_slice))   # coercion only for nicer console display

## ADT -----------------------------------------------------------------------
adt_slice <- Seurat::GetAssayData(seu[["ADT"]], layer = "counts")[1:5, 1:5]
cat("\n── ADT (first 5 features × 5 cells) ──\n")
print(as.matrix(adt_slice))

Files

ADT_features.csv

Files (3.1 GB)

Name Size
md5:7a5867bf147e4381dd9f008f2549a4a6
154.7 MB Download
md5:6ad8628f201d202e15c05636336fa450
1.3 kB Preview Download
md5:313238f03794b539f80d0bb52ca99d39
5.1 MB Preview Download
md5:b534425751360a94c3c54240eaa5ca54
2.5 GB Download
md5:85a23c35e75aa4fb168fcc7beeeb3e9d
275.6 kB Preview Download
md5:5a205b3c4687e3f1872309f171093148
9.2 MB Preview Download
md5:65340c2a86d6ce2061c06b0e82d973a2
50.0 MB Preview Download
md5:2e6843b08ed2b6860ad2d910e56cdc17
420.2 MB Download

Additional details

Related works

Is published in
Publication: 10.1172/jci.insight.183080 (DOI)