现在网上查到的分享好多都是用的R中ballgown包进行差异表达分析,有工具就用可是好文明。不过似乎不用这个R包也可以提取FPKM进行分析,虽然麻烦了点,不过也是一个练手的好机会。

一年后我才发现有个最最最直接简单的方法,stringtie本身提供了-A参数,加上去就可自动生成带有FPKM和TPM的表格。这个故事告诉我们读工具的manual是多么的重要!(2022.3.28)
 统合stringtie生成的gene_abund.tab可以参考这条:

library(dplyr)
path=getwd()
setwd(path)
folders=dir(pattern="gene_abund.tab")
files_path=list()
for(j in 1:length(folders)){files_path[j]=paste(path,"/",folders[j],sep="")
}
C=list()
for(i in 1:length(files_path)){assign(paste("TPM",i,sep=""),read.table(file = files_path[[i]],header = T,sep = '\t')%>%select(,one_of("Gene.ID","TPM")))C[[i]]=get(paste("TPM",i,sep=""))
}
PRJ=Reduce(function(x,y) dplyr::left_join(x,y,by="Gene.ID"),C)
rownames(PRJ)=PRJ[,1]
PRJ=PRJ[,-1]
names(PRJ)=c(folders)
setwd(path)
write.table(PRJ,file="mergeTPM.tsv")

 最好还是按上面的通过stringtie来生成FPKM、TPM,下面这种直接从gtf里面提取的方法并不适用于大多数情况,只有当转录本和基因的名字完全相同时才可以使用,而基本每个基因都对应多个转录本,需要具体看注释情况。

library(dplyr)path=getwd()
#在/PRJNA*/*/ballgown下执行,即stringtie中-o参数设置的路径下。setwd(path)
folders=dir(pattern="SRR")
#获取工作目录下名字含有SRR的目录和文件,我这里只有目录。files_path=list()
for(j in 1:length(folders)){files_path[j]=paste(path,"/",folders[j],sep="")
}
#获取各样品目录的绝对路径。C=list()
for(i in 1:length(files_path)){setwd(files_path[[i]])assign(paste("t_data",i,sep=""),read.table(file = "t_data.ctab",header = T))assign(paste("t_data",i,sep=""),dplyr::select(data.frame(get(paste("t_data",i,sep=""))),9,12))C[[i]]=get(paste("t_data",i,sep=""))
}
#循环读取ballgown中各样品目录下的t_data.ctab文件(其中第九列为gene_id,第十二列为FPKM)。
#读取完t_data.ctab文件后利用dplyr包中的select提取第九和十二列并覆盖。
#最后将数据逐个导入列表C中,为下面Reduce循环做准备。PRJ=Reduce(function(x,y) dplyr::left_join(x,y,by="gene_id"),C)
#最精华的一条代码,通过Reduce实现多个数据框的合并。
#Reduce的格式为:Reduce(f, x, init, right = FALSE, accumulate = FALSE)rownames(PRJ)=PRJ[,1]
PRJ=PRJ[,-1]
names(PRJ)=c(folders)
#将第一列(序号)作为行名。setwd(path)
write.table(PRJ,file="mergefpkm.tsv")
#导出回path路径下。fpkm=read.table(file="mergefpkm.tsv",header=T,row.names=1)
fpkm_log=log2(fpkm+1)
corr=cor(fpkm_log,method="pearson")
write.table(fpkm_log,file="mergefpkm_log.tsv")
write.table(corr,file="cor_fpkm.tsv")
#利用fpkm进行的相关性分析。

 Reduce这个东西感觉还是蛮有用的,可以将一个只能处理两个数据的函数应用于有三个及以上待处理数据的场景,简单的比如三个数累加,复杂一点就是merge合并多个数据框等等,可惜就是有点难懂,下面是官方的help:

Reduce(f, x, init, right = FALSE, accumulate = FALSE)

f:a function of the appropriate arity (binary for Reduce, unary for Filter, Find and Position, k-ary for Map if this is called with k arguments). An arbitrary predicate function for Negate.

x:a vector.

init:an R object of the same kind as the elements of x.

right:a logical indicating whether to proceed from left to right (default) or from right to left.

accumulate:a logical indicating whether the successive reduce combinations should be accumulated. By default, only the final combination is used.

 下面是我自己的理解:
f指的是要用的函数,可以是简单的“+”法,也可以是复杂的自定义函数,同时也需要指定需要的数据个数;
x指的是需要导入给上面的f函数进行处理的一系列数据,一般用向量或列表的形式导入;
init指的是x的初始值??
right是否从右到左??
accumula是否显示计算过程??

 似乎这个f指定的格式有好几种,我感觉还是我例子里用的那种好理解一点点。。。

 Reduce(function(x,y) dplyr::left_join(x,y,by=“gene_id”),C)

 function(x,y)和dplyr::left_join(x,y,by="gene_id"整一个相当于参数中的f,C相当于参数中的x。

 本文仅为本人学习记录,可能有错误,代码也可能有许多值得优化的地方,希望各位路过的大佬批评指正。

 做完之后还是想感叹有工具就用是好文明啊!

非R包的ballgown提取FPKM的方法及R中dplyr包和Reduce函数的使用实例相关推荐

  1. R语言dplyr包的slice函数提取数据集的数据行实战

    R语言dplyr包的slice函数提取数据集的数据行实战 目录 R语言dplyr包的slice函数提取数据集的数据行实战 #导入dplyr包

  2. R语言做如何做多元回归分析(逐步回归)之 提取回归结果参数-调整R方,标准化回归系数

    setwd("D:\R\myrfile") getwd() –逐步回归提取回归结果参数-调整R方,标准化回归系数-- read.table("demo.csv" ...

  3. Linux下dpkg的用法,linux中管理包的apt和dpkg命令用法

    1,apt-get命令 apt-get是debian,ubuntu发行版的包管理工具,与红帽中的yum工具非常类似,适用于deb包管理式的操作系统,主要用于自动从互联网的软件仓库中搜索.安装.升级.卸 ...

  4. anaconda怎么使用python包_Anaconda中python包的介绍与使用方法

    Anaconda中python包的介绍与使用方法 目录: 1.包的定义 2.常用包管理器 3.包管理器的使用方法 4.数据科学常用的包 1.包的定义 由多个和同一功能相关的模块组成,通常为含有_ini ...

  5. Android IOS WebRTC 音视频开发总结(八十七)-- WebRTC中丢包重传NACK实现分析

    Android IOS WebRTC 音视频开发总结(八十七)-- WebRTC中丢包重传NACK实现分析 本文主要介绍WebRTC中丢包重传NACK的实现,作者:weizhenwei ,文章最早发表 ...

  6. R:Reduce函数

    提出问题 如何将多个数据框按照同一列merge呢? 解决问题 一个一个merge固然可以,但是费时间且代码看起来十分丑陋,Reduce函数很好解决了这个问题 先看一个例子: ## cumsum 函数用 ...

  7. R语言中的countif——dplyr包中的filter函数和nrow

    今天一早上起来又扑到R上面写笨人的matlab课作业(悲),脑壳一整个晕晕--这份作业是我用R语言从CHIP数据库提取数据,做前期数据处理和变量计算,之后给同组的建模的同学,让她用matlab建模. ...

  8. pvrect r语言 聚类_R语言常用统计方法包+机器学习包(名称、简介)

    上期帮大家盘点了一下R中常用的可视化包,这期将简要盘点一下关于统计分析与机器学习的R包,并通过简要介绍包的特点来帮助读者深入理解可视化包. 本文作者为"食物链顶端"学习群中的小伙伴 ...

  9. r语言集合补集_R语言学习笔记(14)-常用包

    一.reshape2包对数据格式进行转换 > x + data = 1:5) > y + data = 1:5) > x k1 k2 data 1 NA 1 1 2 NA NA 2 ...

最新文章

  1. JSP学习笔记(五):日期处理、页面重定向、点击量统计、自动刷新和发送邮件...
  2. 分布式深度学习最佳入门(踩坑)指南
  3. 国家航天局:中国空间站预计到2022年前后建成
  4. vlc rtsp流 转 http播放视频
  5. kmp——next数组的应用---cout the string
  6. 【NLP】NLP实战篇之tensorflow2.0快速入门
  7. nginx.conf配置格式
  8. android自定义滤镜,【Android】自定义View那点事(三)ColorFilter篇
  9. 2021年高考成绩查询贵州分数线,2021年贵州省高考分数线
  10. python3.7.1使用_在不影响使用python3.7.1的功能的情况下,是否可以从python代码中删除所有的ufuture_uu语句?...
  11. 漆桂林 | 知识图谱的应用
  12. linux gdb打印内存命令,gdb中查看内存方法总结
  13. 谷歌浏览器添加.crx插件
  14. 关于简历的一点心得(纯属个人想法,非专业人士,欢迎批评指正~)
  15. Verilog作业(一)
  16. 【BZOJ3675】【Apio2014】序列分割
  17. centos配置maven环境
  18. java 凸包算法_JAVA凸包算法
  19. vfp 生成html,利用VFP脚本开发动态Web系统
  20. 基于cat12和SPM12进行SBM数据分析笔记

热门文章

  1. 斜齿轮的优缺点是什么?
  2. Linux初学者学习方法
  3. NOIP 2011 年普及组初赛试题整理
  4. 斐波那契数列问题的解决方法—函数递归部分
  5. SpringBoot读写分离
  6. pytorch版Mask RCNN
  7. leetcode数据库题库-178. 分数排名
  8. php 柱状 折线 组合,柱状图和折线图组合怎么用
  9. python rstrip函数_【C++实现python字符串函数库】strip、lstrip、rstrip方法
  10. python怎么安装random_python怎么调用random