Skip to content

Spatial Transcriptomics Data Processing: SeekSpace Sample Splitting Method

Author: SeekGene
Time: 2 min
Words: 337 words
Updated: 2026-02-28
Reads: 0 times
Spatial-seq Analysis Guide Notebooks Basic Analysis
R
library(Seurat)
library(tidyverse)
library(Matrix)
R
# Function to convert base64 to png image
Base64ToPng <- function(obj, width_px = 1000) {
  for (i in seq_along(obj@misc$info)) {
    for (j in c("img", "img_he")) {
      val <- obj@misc$info[[i]][[j]]
      if (is.null(val) || is.na(val)) next

      b64 <- stringr::str_remove(val, '^data:[^;]*;base64,')
      img_raw <- base64enc::base64decode(b64)

      grob <- magick::image_read(img_raw) %>%
        magick::image_resize(sprintf("%d>", width_px)) %>%
        grid::rasterGrob(x = 0, y = 0,
                         width = grid::unit(1, "npc"), height = grid::unit(1, "npc"),
                         just = c(0, 0), interpolate = TRUE)

      key <- if (j == "img") "img_gg" else "img_he_gg"
      obj@misc$info[[i]][[key]] <<- grob
    }
  }
  invisible(obj)
}
R
obj <- readRDS(object)
R
# Convert base64 to PNG image
Base64ToPng(obj)
R
meta <- read.table(metadata,sep = '\t',header = T, row.names = 1)
R
obj <- AddMetaData(obj, meta)
R
for (i in unique(obj@meta.data$Sample)){
dir.create(paste0(i,'_filtered_feature_bc_matrix'))

obj1 <- subset(obj, subset=Sample==i)
names(obj1@misc$info) <- i

data <- Embeddings(obj1, reduction = 'spatial') %>% as.data.frame()
colnames(data) <- c("X","Y")
data <-rownames_to_column(data, 'Barcode')
write_delim(data, paste0(i,'_filtered_feature_bc_matrix/cell_locations.tsv'), delim = '\t')

writeMM(obj1@assays$RNA@counts, file = paste0(i,'_filtered_feature_bc_matrix/matrix.mtx'))
data.frame(GeneID = rownames(obj1), Gene = rownames(obj1)) %>%
write.table(paste0(i,'_filtered_feature_bc_matrix/genes.tsv'), row.names = F, col.names = F, sep = '\t', quote = F)
data.frame(Barcode = colnames(obj1)) %>%
write.table(paste0(i,'_filtered_feature_bc_matrix/barcodes.tsv'), row.names = F, col.names = F, sep = '\t', quote = F)

saveRDS(obj1, paste0(i, ".rds"))
    }
output
Warning message in dir.create(paste0(i, "_filtered_feature_bc_matrix")):
“'KO_57_filtered_feature_bc_matrix' already exists”
Warning message in dir.create(paste0(i, "_filtered_feature_bc_matrix")):
“'KO_13_filtered_feature_bc_matrix' already exists”
R
0 comments·0 replies