• dplyr

    • 背景简介
    • 安装和数据准备
    • 常用函数
      • 变量筛选select
      • 数据筛选filter
      • 排序arrange
      • 创建新变量mutate

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

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

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

  1. R语言数据处理——基础篇 data.frame基本操作

    文章目录 R语言数据处理--基础篇 data.frame基本操作 data.frame的创建 数据访问.条件筛选与删除 数据访问 数据筛选 删除 使用`gather()`进行data.frame数据格 ...

  2. 语句拼接_第2课:一个周末学会R语言数据处理:表拆分和拼接

    从一线收集了两百个文件,要整合到一起?总部一张全国两百个城市的汇总表,拆成两百个小文件?开什么玩笑,难道要复制粘贴到天荒地老... 不用这么麻烦,一个循环,一个语句,实现快速表拆分和表拼接,从此告别复 ...

  3. r语言必学的十个包肖凯_30 天学会R DAY 14:R语言必学包dplyr

    原标题:30 天学会R DAY 14:R语言必学包dplyr 第14天 R语言必学包dplyr R语言非常讲究数据的整理,我们在7-13天的R语言学习内容中,着重都是关于R语言的整理,各种方法对数据进 ...

  4. Gauss Quadrature数值求积基础与R语言实践

    Gauss Quadrature数值求积基础与R语言实践 Gauss Quadrature的基本概念 R语言实践 例1:Gauss-Legendre Quadrature 例2:Gauss-Lague ...

  5. R语言数据处理学习记录--使用linkET包完成mental test

    R语言数据处理学习记录–使用linkET包完成mental test 注:本文仅作为自己的学习记录以备复习查阅 一 简单介绍一下 这个包依旧是来自于GitHub上,作者给出的介绍:linkET的目标是 ...

  6. 零基础自学R语言 1 R语言介绍 1.3 R扩展软件包的安装与管理

    零基础自学R语言 文章目录 零基础自学R语言 1 R语言介绍 1.3 R扩展软件包的安装与管理 1.3.1 扩展包使用 1.3.2 安装 1.3.3 Github和BioConductor的扩展包 1 ...

  7. R开发(part3)--概率基础和R语言

    学习笔记,仅供参考,有错必纠 参考自:<R的极客理想>-- 张丹 文章目录 R开发 概率基础和R语言 随机变量 大数定理 R开发 概率基础和R语言 随机变量 在样本空间(1,2,3,4,5 ...

  8. r语言pls分析_零基础学习R语言分析GEO

    关于零基础用R语言分析GEO的视频已更新完,发布在B站,有兴趣的小伙伴可以移驾到B站,我的B站号:I_am_Becky 之前录制过一系列关于零代码分析GEO数据的,但是这样画出来的图太low了,所以学 ...

  9. R语言进行Box-Cox变换

    @R语言进行Box-Cox变换 R语言进行Box-Cox变换 Box-Cox变换是Box和Cox在1964年提出的一种广义幂变换方法,是统计建模中常用的一种数据变换,用于连续的响应变量不满足正态分布的 ...

最新文章

  1. java nextline_Java编程语言基础的9根支柱
  2. 物联网助推超市转型之具体应用分析
  3. mysql中lock_mysql中的锁lock
  4. [BZOJ4403]序列统计
  5. 【新星计划】Python OpenCV 形态学应用—图像开运算与闭运算
  6. qt vs插件 qt-vsaddin下载
  7. 优朋普乐大数据_优朋普乐邵以丁:用大数据全面洞察需求
  8. Algorithm I assignment Collinear
  9. jsp 内置的对象的简要概述(转)
  10. c/c++ 前置声明 -- typedef问题
  11. Nginx负载均衡和反向代理设置
  12. 高性能数据库集群:读写分离
  13. 解读灰度直方图的信息
  14. lib文件夹 springboot_我把 Spring Boot 项目从 18.18M 瘦身到 0.18M,部署起来真省事!...
  15. python图像拼接_图像拼接_图像拼接算法_python图像拼接 - 云+社区 - 腾讯云
  16. ubuntu20.04 NVIDIA显卡驱动安装教程(Y9000p)
  17. win 7旗舰版开机提示 :explorer.exe-无法找到入口
  18. Oliver的成绩(vector)
  19. 【TAGE】分支预测
  20. DKN: Deep Knowledge-Aware Network for News Recommendation

热门文章

  1. 代码中应用设计模式,看这一篇就够了
  2. 值得安利!推荐7款让人眼前一亮的宝藏软件
  3. 我们软件是如何保障用户数据安全的?
  4. MVC框架内容-控制器
  5. 找出数组中重复的数字---多思路
  6. 哈夫曼树实现压缩文件
  7. C++中的容器(STL容器)container
  8. 混合深度卷积,更少参数下的轻量级网络
  9. EPSON机器人建立TCP/IP通讯的简单demo
  10. java 如何实现导出文件