- dplyr
- 背景简介
- 安装和数据准备
- 常用函数
- 变量筛选select
- 数据筛选filter
- 排序arrange
- 创建新变量mutate
作者:秦媛
dplyr
背景简介
在处理数据的过程中,经常需要根据需求从完整的实验设计和数据中筛选、整理出可以直接使用的部分,这就涉及到数据整理和变换工作。
常用的数据整理和变换主要包括以下几类:
- 选取特定分析变量
- 筛选满足条件的数据
- 按照某个变量排序
- 对数据进行分组和汇总
- 对原始变量重新加工并生成新变量
如果我们想通过R语言来解决上述问题,dplyr
包就是一个很好用的工具之一。所以在这里对dplyr
包的基础和常用功能进行小结。
安装和数据准备
安装dplyr
包
install.packages("dplyr")
library(dplyr)
示例数据:以我们最常用到的OTU表和物种分类表为例来说明dplyr
的用法。
otu <- read.table("otutab_norm.txt", head=TRUE,sep="\t", comment.char="")
tax <- read.table("taxonomy_8.txt", head=TRUE, sep="\t", comment.char="")
常用函数
dplyr
包最常使用的函数主要包括以下几个:
- 变量筛选函数:
select
- 数据筛选函数:
filter
- 排序函数:
arrange
- 变形函数:
mutate
- 汇总函数:
summarize
- 分组函数:
group_by
- 管道连接符:
%>%
- 随机抽样函数:
sample_n
,sample_frac
变量筛选select
select
是一个筛选变量函数,可以通过选择列名,筛选指定的变量。
通常一个OTU表的每一列都是唯一的样品名,即一个单独的变量,每一行是一个OTU单元。我们常见的操作就是根据不同的需求,我们选择不同的样品进行比较,分析组间差异OTU。
首先我们要根据实验设计,明确所有样品最基本的分组。
在工作目录下,输入以下命令可以快速查看样品分组信息:
tail -n+2 design.txt | cut -f 5 | sort | uniq | awk '{print "\""$1"\""}' | tr "\n" ","
(注:输入文件design.txt
是实验设计,通常第五行是groupID,即分组信息)
例如我们的示例数据,样品信息就是
"BSBS","EMS1212R","EMS1663R","EMS2384R","EMS2661R","EMS2876R","EMS2883R","EMS2985R","Wt1R","Wt2R"
因为我们的实验每组样品通常会有一些生物学重复,在示例数据OTU表中,每组有三个重复。
所以,如果只看Bulksoil的OTU分布情况,就可以提取:
data1 <- select(otu, BSBS1, BSBS2, BSBS3)
如果想查看多组,多个样品的,可以提取:
# 用冒号连接列名,可以选择多个列
data2 <- select(otu, BSBS1:BSBS3, Wt1R1:Wt1R3, EMS1663R1:EMS1663R3)
除此之外,dyplr
提供了一些有特殊功能的函数,和select()
相结合,用于变量名称的筛选。包括starts_with
,ends_with
,contains
,matches
,one_of
,num_range
和everything
等
# 选择所有野生型
data_wt <- select(otu, starts_with("Wt"))
# 选择除BS以外的所有样品
data_except_bs <- select(otu, -starts_with("BS"))
# 选择变量名中包含2384的列
data_2384 <- select(otu, contains("2384"))
# 调整列顺序,将WtR1组放在最前面
data_wt_front <- select(otu, Wt1R1:Wt1R3, everything())
数据筛选filter
filter
函数是数据筛选函数,直接指定条件,筛选符合指定条件的数据。
例如,筛选根外土OTU数量大于10的样品
data3 <- filter(data1, BSBS1 > 10 & BSBS2 >10 & BSBS3 >10 )
筛选物种分类表中属于某一类的样品
data_Alpha <- filter(tax, Class == "Alphaproteobacteria")
filter
函数也可以用于单独检查、剔除异常值。
排序arrange
arrange
函数是根据变量名依次对数据框进行排序,靠前的变量优先级越高,对变量名使用desc函数即为倒序。
默认是升序排列:
data4 <- arrange(data3, BSBS1)
倒序排列是在列名前加desc()
data5 <- arrange(data3, desc(BSBS1))
创建新变量mutate
mutate
函数可用于在原始变量的基础上,经过简单计算和预处理,创建新的变量
举个简单的例子,求某一组样品多个重复下的均值,写入新变量中:
data6 <- mutate(data3, ave= round((BSBS1 + BSBS2 + BSBS3)/3))
(round()
用来四舍五入取整)
参考资料
R语言滴水穿石系列文章(一):dplyr-高效的数据变换与整理工具: https://www.jianshu.com/p/b2abad66cb01
R语言数据处理之dplyr包: https://zhuanlan.zhihu.com/p/27505645