基于R筛选过滤低丰度物种的几种方式

简介: 基于R筛选过滤低丰度物种的几种方式

首先导入输入文件物种某水平的分类表

gene <- read.delim('../nr/Phylum.txt',row.names = 1, sep = '\t', stringsAsFactors = FALSE, check.names = FALSE)

8e100f7a3494aee6a99cc6d52f26c43.png

百分比转化

方式一

gene_precent1 <- as.data.frame(apply(gene, 2, function(x){x/sum(x)}))

方式二

gene_precent2 <-  as.data.frame(t(t(gene)/colSums(gene,na=T))*100)
colSums(gene_precent2)

37f360aa0305b5065ab1e3f58718797.png

在微生物组数据分析中,样品分析之前我们经常需要对微生物组的丰度进行筛选,

  1. 过滤在任何样本中百分比小于1%的物种

gene_filter <-data.frame(gene_precent1[apply(gene_precent1,1,max)>0.01,])
  1. 保留在任何样品中百分比大于 1%的物种

gene_filter <-data.frame(gene_precent1[apply(gene_precent1,1,min)>0.001,])
  1. 过滤样品平均相对丰度小于1%的物种

gene_filter2 <- data.frame(gene_precent1[which(apply(gene_precent1, 1, function(x){mean(x)})
                                >0.01),], check.names=F)

另一种方法

gene_filter <- gene_precent1[which(rowMeans(gene_precent1) >= 0.01), ]
  1. 只保留相对丰度总和高于 0.005 的属,换成rowSums即可

gene_filter <- gene_precent1[which(rowSums(gene_precent1) >= 0.005), ]
  1. 过滤在一半或者大于一半样品中丰度为0的物种

cutoff = .5
gene_filter <- data.frame(gene_precent1[which(apply(gene_precent1, 1, function(x){length(which
                                                                (x!= 0))/length(x)}) >= cutoff),])

提一点, 代码中x!=0其实可以换为x大于等于某个值,就代表过滤在一半或者大于一半样品中丰度大于等于多少的物种,注意变通~~~

2fcd9c2c03d8ba635c6e53aef658e41.png

另外,在有的文献中还有是过滤每组中至少一半的样品丰度丰度大于0.1%,也就是说当你有俩组每组6个样品的情况下,你得保证每组都是至少有3个样品的丰度大于0.1%。其实也很简单,我们分别在各组中去执行上述代码,最后筛选到的物种再合并一下就OK了,用到了union函数,它的功能是会整合出现在x数据框中或y数据框中的数据,同时去除了两个数据框中重复的部分。

cutoff = 0.5
gene1 <- data.frame(gene_precent1[,1:6][which(apply(gene_precent1[,1:6], 1, function(x){length(which
                                                                                             (x>=0.001))/length(x)}) > cutoff),])
gene2 <- data.frame(gene_precent1[,7:12][which(apply(gene_precent1[,7:12], 1, function(x){length(which
                                                                                               (x>=0.001))/length(x)}) > cutoff),])
gene_filter1 <- gene_precent1[union(rownames(gene1),rownames(gene2)),]

提供另一种方法过滤在一半或者大于一半样品中丰度为0的物种

gene_filter <- gene_precent1
gene_filter[gene_filter >0] <- 1
gene_filter <- gene_precent1[which(rowSums(gene) >= ncol(gene_precent1)/2), ]


相关文章
|
Python
Python 压缩PDF减小文件大小
【8月更文挑战第6天】介绍了三种用Python压缩PDF文件的方法:1) 使用`pdfcompressor`库,安装后可通过简单命令压缩文件;2) 利用`PyPDF2`库,需手动设置压缩参数;3) 采用`pdfsizeopt`库,一键优化PDF大小。各方法均提供示例代码,便于快速实现文件压缩。
1910 0
|
机器学习/深度学习 数据采集 算法
Machine Learning机器学习之随机森林(Random Forests)
Machine Learning机器学习之随机森林(Random Forests)
|
机器学习/深度学习 人工智能 缓存
AI智能体研发之路-模型篇(二):DeepSeek-V2-Chat 训练与推理实战
AI智能体研发之路-模型篇(二):DeepSeek-V2-Chat 训练与推理实战
2487 0
|
数据采集 JSON 数据可视化
基于Python的全国主要城市天气数据可视化大屏系统
本文介绍了一个基于Python开发的全国主要城市天气数据可视化大屏系统,该系统利用requests库进行数据采集、Pandas进行数据处理与分析,并采用Echarts和Flask实现数据的可视化展示和Web交互,以直观、实时地呈现天气变化趋势。
916 2
基于Python的全国主要城市天气数据可视化大屏系统
|
人工智能 数据可视化 数据挖掘
这图怎么画| 富集分析之双向柱状图
这图怎么画| 富集分析之双向柱状图
854 0
|
算法 计算机视觉 开发者
OpenCV中LBPH人脸识别器识别人脸实战(附Python源码)
OpenCV中LBPH人脸识别器识别人脸实战(附Python源码)
1116 0
|
算法 Go
差异分析|DESeq2完成配对样本的差异分析
差异分析|DESeq2完成配对样本的差异分析
811 0
差异分析|DESeq2完成配对样本的差异分析
|
C++
【SPSS】两独立样本的曼-惠特尼U检验详细操作教程(附案例实战)
【SPSS】两独立样本的曼-惠特尼U检验详细操作教程(附案例实战)
3554 0
|
存储 数据可视化 数据处理
ggalluvial | 冲击图/ 桑基图绘制
ggalluvial | 冲击图/ 桑基图绘制
937 0
|
数据可视化 Go
一行代码绘制高分SCI火山图
经过一段时间的文献阅读和资料查询,终于找到了一个好用而且简单的包——ggVolcano, 它是一个基于R语言和ggplot2绘图包开发的生物信息学数据可视化工具。它可以用于绘制火山图(Volcano plot),帮助研究者分析高通量实验数据,如基因表达谱或蛋白质组学数据,以识别差异表达或差异富集的基因或蛋白质。
1402 0

热门文章

最新文章