woodcorpse的个人博客分享 http://blog.sciencenet.cn/u/woodcorpse

博文

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

已有 2996 次阅读 2018-8-7 19:42 |个人分类:R|系统分类:科研笔记

[TOC]

本文“植物微生物组”公众号原创,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



http://wap.sciencenet.cn/blog-3334560-1128067.html

上一篇:Basic005. Intro to statistics basic terms统计名词介绍
下一篇:基础002. Editplus编辑远程文件

0

该博文允许注册用户评论 请点击登录 评论 (0 个评论)

数据加载中...
扫一扫,分享此博文

Archiver|手机版|科学网 ( 京ICP备07017567号-12 )

GMT+8, 2021-10-27 22:26

Powered by ScienceNet.cn

Copyright © 2007- 中国科学报社

返回顶部