jjzjj

Seurat常见操作

MR来了 2023-09-21 原文

文件处理相关

## 读取RDS文件
PRO0 <- readRDS('../00.signleron/CD45+/public_c1613_rental.diff_PRO.rds')


## matrix转成10x格式
library(Seurat)
RAW1 <- read.table('24h_Drug_ctrl.txt.A549.matrix', sep = "\t",header= TRUE,row.names=1)
PRO1 <- CreateSeuratObject(counts = RAW1)
library(DropletUtils)
write10xCounts(x = PRO1@assays$RNA@counts, path = '10x_matrix')

# For output from CellRanger < 3.0:  barcodes.tsv, genes.tsv, and matrix.mtx
# For output from CellRanger >= 3.0: barcodes.tsv.gz, features.tsv.gz, and matrix.mtx.gz

## Seurat2 to Seurat higer
tmp <- readRDS('./GSE131984_SUM159_10X_JQ1-Pal-Tax.Rdata')
PRO <- CreateSeuratObject(counts = tmp@raw.data, project = "ms",  min.cells = 3, min.features = 200)

Seurat old object 转成 Seurat3
PRO1 <- UpdateSeuratObject(object = PRO1)

## Seurat对象输出10x数据
library(DropletUtils)
write10xCounts(x = PRO@assays$RNA@counts, path = '10x', version="3")


## Seurat对象输出h5ad格式
library(Seurat)
library(SeuratDisk)
PRO = UpdateSeuratObject(object = PRO)
SaveH5Seurat(PRO, filename = "c1613.neg.h5Seurat")
Convert("c1613.neg.h5Seurat", dest = "h5ad")

## 输出当前Idents值
Idents(PRO)

画图相关

## umap图
p5 <- DimPlot(PRO, reduction = "umap",label = TRUE,label.size=cell.label.size)+NoLegend()
p5

设置图片大小
options(repr.plot.width=14, repr.plot.height=6)

展示单个基因的情况
FeaturePlot(object = pbmc_small, features = 'PC_1')

通过函数将细胞重新分类
tcrs_cells <- c("P4")
check_in <- function(x) {
    if( x  %in% tcrs_cells){
        return("P4")
    }else{
        return("no P4")
    }
}
rds@meta.data$P4 = sapply(rds@meta.data$"Sample ID", check_in)

变量处理相关

## 修改identity
PRO <- SetIdent(PRO, value = PRO@meta.data$gene_clustering)
## 差异基因比较
diff_10 <- FindMarkers(rds0, ident.1 = 'sample1', ident.2 = 'sample2',verbose = FALSE)


## 修改某一列的名字
names(PRO@meta.data)[names(PRO@meta.data) == 'patient'] <- 'sampletype'
## switch目前的assay
DefaultAssay(object = PRO) <- "SCT"

## 根据其他列生成另外的列
PRO1@meta.data$sample <- sapply(strsplit(as.character(PRO1@meta.data$Cell.Barcode), '_'), "[", 2)
### 哈希替换
library(hash)
h <- hash( LETTERS, 1:26 )
cvt_atc <- function(x) {
    return(h[[x]])
}
tm$atc2=sapply(tm$atc,cvt_atc)

library(data.table)
df <- sampproj@meta.data
df <- setDT(df) %>% 
  .[grepl("1", s0), c("sample","sampletype") := .("Before NAC","Before NAC")] %>% 
  .[grepl("2", s0), c("sample","sampletype") := .("After NAC","After NAC")]

## index变成另外一列
pbmc@meta.data$Cell.Barcode <- rownames(pbmc@meta.data)

## ident增加样品名字
sampproj_cc <- RenameCells(sampproj_cc, add.cell.id = name[i])
RenameCells(
  object,
  add.cell.id = NULL,
  new.names = NULL,
  for.merge = FALSE,
  ...
)

## 批量聚类
pbmc <- FindClusters(pbmc, resolution=seq(0.1,0.4,by=0.02), verbose = FALSE,algorithm=1)

## 其他列变成index,和删掉它们

### Seurat4 转到 Seurat3
umap <- Embeddings(pro, reduction = "umap")
write.csv(umap, 'umap.csv')
umap <- read.csv('./umap.csv', head=TRUE)
rownames(umap) <- umap$X
umap <- umap[, -1]
PRO[["umap"]] <- CreateDimReducObject(embeddings = data.matrix(umap), key = "umap", assay = DefaultAssay(PRO))

### Seurat3提取矩阵数据
# Retrieve or set data in an expression matrix ('counts', 'data', and 'scale.data')
GetAssayData(object = pbmc, slot = "counts")
pbmc <- SetAssayData(object = pbmc, slot = "scale.data", new.data = new.data)
pbmc[["RNA"]]@data ## @counts是UMI @data是normalize后的

subset操作

# Subset Seurat object based on identity class, also see ?SubsetData
subset(x = pbmc, idents = "B cells")
subset(x = pbmc, idents = c("CD4 T cells", "CD8 T cells"), invert = TRUE)

# Subset on the expression level of a gene/feature
subset(x = pbmc, subset = MS4A1 > 3)

# Subset on a combination of criteria
subset(x = pbmc, subset = MS4A1 > 3 & PC1 > 5)
subset(x = pbmc, subset = MS4A1 > 3, idents = "B cells")

# Subset on a value in the object meta data
subset(x = pbmc, subset = orig.ident == "Replicate1")

# Downsample the number of cells per identity class
subset(x = pbmc, downsample = 100)

## 根据metadata的列提取Seurat对象数据
PRO@meta.data <- transform(PRO@meta.data, flag=Cell.Barcode %in% meta0$s0)
PRO2 <- subset(x = PRO, subset = flag == TRUE)

有关Seurat常见操作的更多相关文章

  1. git使用常见问题(提交代码,合并冲突) - 2

    文章目录git常用命令(简介,详细参数往下看)Git提交代码步骤gitpullgitstatusgitaddgitcommitgitpushgit代码冲突合并问题方法一:放弃本地代码方法二:合并代码常用命令以及详细参数gitadd将文件添加到仓库:gitdiff比较文件异同gitlog查看历史记录gitreset代码回滚版本库相关操作远程仓库相关操作分支相关操作创建分支查看分支:gitbranch合并分支:gitmerge删除分支:gitbranch-ddev查看分支合并图:gitlog–graph–pretty=oneline–abbrev-commit撤消某次提交git用户名密码相关配置g

  2. ruby - 如何使用 Selenium Webdriver 根据 div 的内容执行操作? - 2

    我有一个使用SeleniumWebdriver和Nokogiri的Ruby应用程序。我想选择一个类,然后对于那个类对应的每个div,我想根据div的内容执行一个Action。例如,我正在解析以下页面:https://www.google.com/webhp?sourceid=chrome-instant&ion=1&espv=2&ie=UTF-8#q=puppies这是一个搜索结果页面,我正在寻找描述中包含“Adoption”一词的第一个结果。因此机器人应该寻找带有className:"result"的div,对于每个检查它的.descriptiondiv是否包含单词“adoption

  3. ruby-on-rails - 如何处理 Grape 中特定操作的过滤器之前? - 2

    我正在我的Rails项目中安装Grape以构建RESTfulAPI。现在一些端点的操作需要身份验证,而另一些则不需要身份验证。例如,我有users端点,看起来像这样:moduleBackendmoduleV1classUsers现在如您所见,除了password/forget之外的所有操作都需要用户登录/验证。创建一个新的端点也没有意义,比如passwords并且只是删除password/forget从逻辑上讲,这个端点应该与用户资源。问题是Grapebefore过滤器没有像except,only这样的选项,我可以在其中说对某些操作应用过滤器。您通常如何干净利落地处理这种情况?

  4. ruby-on-rails - 在 Ruby on Rails 中发送响应之前如何等待多个异步操作完成? - 2

    在我做的一些网络开发中,我有多个操作开始,比如对外部API的GET请求,我希望它们同时开始,因为一个不依赖另一个的结果。我希望事情能够在后台运行。我找到了concurrent-rubylibrary这似乎运作良好。通过将其混合到您创建的类中,该类的方法具有在后台线程上运行的异步版本。这导致我编写如下代码,其中FirstAsyncWorker和SecondAsyncWorker是我编写的类,我在其中混合了Concurrent::Async模块,并编写了一个名为“work”的方法来发送HTTP请求:defindexop1_result=FirstAsyncWorker.new.async.

  5. ruby - 在 Ruby 中是否有一种惯用的方法来操作 2 个数组? - 2

    a=[3,4,7,8,3]b=[5,3,6,8,3]假设数组长度相同,是否有办法使用each或其他一些惯用方法从两个数组的每个元素中获取结果?不使用计数器?例如获取每个元素的乘积:[15,12,42,64,9](0..a.count-1).eachdo|i|太丑了...ruby1.9.3 最佳答案 使用Array.zip怎么样?:>>a=[3,4,7,8,3]=>[3,4,7,8,3]>>b=[5,3,6,8,3]=>[5,3,6,8,3]>>c=[]=>[]>>a.zip(b)do|i,j|c[[3,5],[4,3],[7,6],

  6. ruby - 将对象设置为 nil 是否很常见? - 2

    我正在构建一个应用程序,想知道是否将未使用的对象设置为nil是生产级编码中的常见做法。我知道这只是垃圾收集器的提示,并不总是处理对象。 最佳答案 根据这个thread如果您使用完一个成员对象,将其设置为nil将引发被引用对象被垃圾回收。如果它是局部变量,方法exit将做同样的事情。也就是说,如果您要求将成员显式设置为nil,我会质疑您的设计。 关于ruby-将对象设置为nil是否很常见?,我们在StackOverflow上找到一个类似的问题: https://

  7. ruby-on-rails - 如何让 Rails View 返回其关联的操作名称? - 2

    我有一个非常简单的Controller来管理我的Rails应用程序中的静态页面:classPagesController我怎样才能让View模板返回它自己的名字,这样我就可以做这样的事情:#pricing.html.erb#-->"Pricing"感谢您的帮助。 最佳答案 4.3RoutingParametersTheparamshashwillalwayscontainthe:controllerand:actionkeys,butyoushouldusethemethodscontroller_nameandaction_nam

  8. ruby - 变量赋值后的 if 语句 - 有多常见? - 2

    我最近与一位同事讨论了以下Ruby语法:value=ifa==0"foo"elsifa>42"bar"else"fizz"end我个人并没有看到太多这种逻辑,但我的同事指出,这实际上是一种相当普遍的Rubyism。我试着用谷歌搜索这个主题,但没有找到任何文章、页面或SO问题来讨论它,这让我相信这可能是一种非常实际的技术。然而,另一位同事发现语法令人困惑,而是将上面的逻辑写成这样:ifa==0value="foo"elsifa>42value="bar"elsevalue="fizz"end缺点是value=的重复声明和隐式elsenil的丢失,如果我们想使用它的话。这也感觉它与Ruby

  9. 常见网络安全产品汇总(私信发送思维导图) - 2

    安全产品安全网关类防火墙Firewall防火墙防火墙主要用于边界安全防护的权限控制和安全域的划分。防火墙•信息安全的防护系统,依照特定的规则,允许或是限制传输的数据通过。防火墙是一个由软件和硬件设备组合而成,在内外网之间、专网与公网之间的界面上构成的保护屏障。下一代防火墙•下一代防火墙,NextGenerationFirewall,简称NGFirewall,是一款可以全面应对应用层威胁的高性能防火墙,提供网络层应用层一体化安全防护。生产厂家•联想网御、CheckPoint、深信服、网康、天融信、华为、H3C等防火墙部署部署于内、外网编辑额,用于权限访问控制和安全域划分。UTM统一威胁管理(Un

  10. Postman测试简单操作 - 2

    1、接口请求基本操作1.1例子tips在view的选项可以zoomin调整窗口字帖大小。1、创建一个测试的workspace,并命名为test2、test后面新增一个addrequest3、选择发送GET,URL为一个开源的https://api.apiopen.top/api/sentences获取每日一句4、点击send查看内容Tips:如果提示出现Error:tunnelingsocketcouldnotbeestablished,statusCode=407错误,参照以下解决办法)关于tunnelingsocketcouldnotbeestablished,cause=getaddri

随机推荐