基础004:R语言数据处理和变换——dplyr

本文“植物微生物组”公众号原创,ID: plantmicrobiome

作者:秦媛

原文链接:基础004:R语言数据处理和变换——dplyr(1)

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

image

变量筛选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_withends_withcontainsmatchesone_ofnum_rangeeverything

# 选择所有野生型
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

  • 3
    点赞
  • 29
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值