基于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), ]


相关文章
|
6月前
单细胞分析|映射和注释查询数据集
单细胞分析|映射和注释查询数据集
82 3
|
5月前
|
敏捷开发 测试技术 持续交付
阿里云云效产品使用问题之是否可以在筛选条件上增加筛选单行文本的内容
云效作为一款全面覆盖研发全生命周期管理的云端效能平台,致力于帮助企业实现高效协同、敏捷研发和持续交付。本合集收集整理了用户在使用云效过程中遇到的常见问题,问题涉及项目创建与管理、需求规划与迭代、代码托管与版本控制、自动化测试、持续集成与发布等方面。
阿里云云效产品使用问题之是否可以在筛选条件上增加筛选单行文本的内容
|
5月前
|
编解码
1066 图像过滤 (15 分)
1066 图像过滤 (15 分)
|
5月前
|
SQL 数据库 UED
条件筛选大作战:解析Where与Having的区别与应用
条件筛选大作战:解析Where与Having的区别与应用
39 0
|
数据采集 数据可视化 数据挖掘
如何筛选和过滤ARWU网站上的大学排名数据
ARWU网站(ShanghaiRanking's Academic Ranking of World Universities)是一个公认的全球大学排名的先驱和最值得信赖的大学排名之一。它每年发布世界前1000所研究型大学的排名,基于透明的方法论和客观的第三方数据。ARWU网站上的大学排名数据可以为高考考生、专业选择、就业指导、行业发展等提供有价值的参考信息。
如何筛选和过滤ARWU网站上的大学排名数据
|
PHP
php清洗数据实战案例(4):按照关联数组相同值名称进行筛选后对不同的指标予以合并计算的解决方案
php清洗数据实战案例(4):按照关联数组相同值名称进行筛选后对不同的指标予以合并计算的解决方案
65 0
|
存储 SQL 机器学习/深度学习
数仓中指标-标签,维度-度量,自然键-代理键,数据集市等各名词解析及关系
这是在数据分析中常见的概念,下钻可以理解成增加维的层次,从而可以由粗粒度到细粒度来观察数据,比如对产品销售情况分析时,可以沿着时间维从年到月到日更细粒度的观察数据。从年的维度可以下钻到月的维度、日的维度等。
数仓中指标-标签,维度-度量,自然键-代理键,数据集市等各名词解析及关系
使用scanpy进行高可变基因的筛选
使用scanpy进行高可变基因的筛选
|
自然语言处理 搜索推荐 算法
推荐系统:基于内容的过滤
此图像包含用户喜欢的电影的描述。根据用户喜欢的电影向用户推荐电影,需要使用这些描述得到一个数学形式,即文本应该是可测量的,然后通过与其他电影进行比较来找到相似的描述。 我们有各种电影和关于这些电影的数据。为了能够比较这些电影数据,需要对数据进行矢量化。在向量化这些描述时,必须创建所有电影描述(假设 n)和所有电影(假设 m)中的唯一词矩阵。列中有所有唯一的单词,行中有所有电影,每个单词在交叉点的电影中使用了多少。这样,文本就可以被矢量化。
284 0
|
数据采集 消息中间件 存储
数据预处理-航线类型操作类型目标与思路|学习笔记
快速学习数据预处理-航线类型操作类型目标与思路
127 0
数据预处理-航线类型操作类型目标与思路|学习笔记