#! usr/R
####zhaoyunfei
####20240728
library(Seurat)
library(dplyr)
library(dbscan)
library(ggplot2)
library(dplyr)
st.object = readRDS('/home/samples/DB/Spatial/cellniche/Muscle.spatial.rds')
st.object$pixel_x = st.object@images$CTR@coordinates$imagerow
st.object$pixel_y = st.object@images$CTR@coordinates$imagecol
st.object$sample = st.object$orig.ident
####st.object = st.object[VariableFeatures(st.object),]
xys = setNames(st.object@meta.data[, c("pixel_x", "pixel_y", "sample")], c("x", "y", "sample"))
platforms = 'Visium'
spotnames <- rownames(xys)
library(dplyr)
names(spotnames) <- c(1:nrow(xys)) %>% paste0()
et spot distances
sdist = 200
###10X空间转录组临近的6个spot
nNeighbours = 6
maxdist = 200
knn_spatial <- dbscan::kNN(x = xys[, c("x", "y")] %>% as.matrix(), k = nNeighbours)
knn_spatial.norm <- data.frame(from = rep(1:nrow(knn_spatial$id), nNeighbours),
to = as.vector(knn_spatial$id),
weight = 1/(1 + as.vector(knn_spatial$dist)),
distance = as.vector(knn_spatial$dist))
minK = 4
# create network for coordinates
spatnet <- knn_spatial.norm
spatnet$from <- spotnames[spatnet$from]
spatnet$to <- spotnames[spatnet$to]
spatnet <- spatnet %>% group_by(from) %>% mutate(rnk = rank(distance)) %>% ungroup()
spatnet = subset(spatnet, distance <= maxdist | rnk <= minK)
# Add coordinates
spatnet <- cbind(spatnet, setNames(xys[spatnet$from, 1:2], paste0("start_", c("x", "y"))))
spatnet <- cbind(spatnet, setNames(xys[spatnet$to, 1:2], paste0("end_", c("x", "y"))))
####空矩阵
neighbor_mol = matrix(ncol = length(unique(spatnet$from)),nrow = length(rownames(st.object)))
for (i in 1:length(colnames(st.object))){
su = spatnet[which(spatnet$from == colnames(st.object)[i]),]
neighbor_mol[,i] = rowSums(st.object@assays$Spatial@counts[,su$to])
}
colnames(neighbor_mol) = colnames(st.object)
rownames(neighbor_mol) = rownames(st.object)
write.csv(neighbor_mol,file = 'neighbor_mol.csv',quote =F)
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。