R语言中的管道操作——magrittr包

一、项目环境

  • 开发工具:RStudio
  • R:3.5.2
  • 相关包:magritter

二、数据准备以及问题阐述

这次要解决的问题是如何使用提取数据框中所有包含缺失值的列。我们知道当我们在处理缺失值时,我们经常会使用平均数、中位数、回归、甚至机器学习等方式来填补数据框中的缺失值。但是在实际的分析过程中,在进行缺失值处理之前,我们往往会花大量的时间来探究缺失值之间的相关性。那么在进行分析之前,首要任务自然就是先将所有包含缺失值的列提取出来。下面我们将会用几种方法来进行这一操作,并说明管道操作的优势。

# 首先我们先导入相关包和数据集
# 导入magrittr包
library(magrittr)# 导入VIM包中的包含缺失值的数据集“sleep”
data(sleep,package = "VIM")# 查看数据集的前几行数据
head(sleep)
BodyWgt BrainWgt NonD Dream Sleep Span Gest Pred Exp Danger
6654.000 5712.0 NA NA 3.3 38.6 645 3 5 3
1.000 6.6 6.3 2.0 8.3 4.5 42 3 1 3
3.385 44.5 NA NA 12.5 14.0 60 1 1 1
0.920 5.7 NA NA 16.5 NA 25 5 2 3
2547.000 4603.0 2.1 1.8 3.9 69.0 624 3 5 4
10.550 179.5 9.1 0.7 9.8 27.0 180 4 4 4
  • BodyWgt: 体重

  • BrainWgt: 脑重

  • NonD: 不做梦时长

  • Dream: 做梦时长

  • Sleep: 睡眠时长

  • Span: 寿命

  • Gest: 妊娠期

  • Pred: 物种被捕食的程度

  • Exp: 睡眠时暴露的程度

  • Danger: 面临的总危险程度

    三、提取包含缺失值的列

1、常规形式

library(dplyr)# 将原始数据赋值到一个临时变量中
data <- sleep# 在R语言中,FALSE转换成数值会变成0,TRUE转换成数值会变成1
# 之所以用abs绝对值函数,是为了在将其转换成数值的前提下不破坏数据框的结构
data <- apply(as.data.frame(abs(is.na(data))),2,sum)# 使用dplyr包的select函数选取所有包含缺失值的列
data <- select(sleep,one_of(names(data[data > 0])))

[注]:这是处理这类数据的一张常规的编写方法,但是会发现中间嵌套了很对层,不方便阅读和修改。同时中间变量data在这个计算的过程中重复出现了多次。

2、函数形式

library(dplyr)# 整体操作没什么变化,只是以函数的形式包裹起来,便于多次使用
na_col_plot <- function(data){data <- as.data.frame(abs(is.na(data)))data <- apply(data,2,sum)data <- select(sleep,one_of(names(data[data > 0])))return(data)
}data <- na_col_plot(sleep)

[注]: 函数形式与通常形式,从整体上来说没有什么他也特别大的变化。但当该操作需要重复用到时,函数形式可以大大的减少代码量。

3、管道操作形式

library(dplyr)# %>% 管道函数可以将符号左边的数据结果,放入右边函数中,作为输入的参数
data <- sleep %>%is.na() %>%abs() %>%as.data.frame() %>%apply(2,sum)data <- select(sleep,one_of(names(data[data > 0])))

[注]: 相比于其他形式,管道操作可以更好的看到整个处理过程的没一步骤

四、结语

本文简单的以提取包含缺失值的列作为例子,来突出管道操作相较于其他形式的一个好处。在编写较短的一段线性操作时,管道操作相对于一般的操作和函数操作而言,可以更直观的展示整个线性操作的处理过程。当时管道操作并不是万能的,当遇到单次较长的一个数据操作时,就需要定义有意义的中间变量来方便调试和理解其意图。同时当遇到需要重复多次使用、非线性操作或是多个输入项等情况,都尽量不要使用管道操作。


很长一段时间没有在csdn中写文章了,事实上后面自己学习过程中的大部分文档都是在语雀中完成的,基本都是自己写自己看。后续文章都会分享到自己的个人博客上,感兴趣的话可以关注一下。个人博客地址

R语言中的管道操作——magrittr包相关推荐

  1. R语言中的管道函数操作 %>%

    R语言中的管道操作 %>% :相当于将左边的作为右边函数的第一个参数. 快捷键:ctrl+shift+M 例如:f(x,y)等价于x %>% f(y) g(f(x,y),z)等价于x %& ...

  2. R语言中最强的神经网络包RSNNS

    转载自:http://www.dataguru.cn/article-1470-1.html R语言中已经有许多用于神经网络的package.例如nnet.AMORE以及neuralnet,nnet提 ...

  3. 试玩R语言中教育诊断的那些包(一):kst

    申明:本文作者才识有限,仅作为学习记录,如有差错,欢迎指正!也希望对他人有些许助益. 在R语言中有一些关于教育诊断的一些包,我试着进入R包的CRAN,进行关键词检索,找到我想要试玩的那些教育数据挖掘( ...

  4. R语言中用于计算Rsquare的包rsq

    文章目录 理论介绍 线性模型情形 广义线性模型情形 函数介绍 rsq()的介绍 实例 rsq.partial()的介绍 相关文献 pcor()函数介绍 vresidual()函数介绍 实例 理论介绍 ...

  5. R语言中的数据处理包dplyr、tidyr笔记

    R语言中的数据处理包dplyr.tidyr笔记 dplyr包是Hadley Wickham的新作,主要用于数据清洗和整理,该包专注dataframe数据格式,从而大幅提高了数据处理速度,并且提供了与其 ...

  6. R语言数据分析笔记——t检验(含正态性检验和方差齐性检验在SPSS和R语言中的操作t检验(单样本、双独立样本、配对样本)在Excel、SPSS、R语言中的操作)

    前言:本文为个人学习笔记,为各大网站上的教学内容之综合整理,综合整理了①假设分析的基础知识.②正态性检验和方差齐性检验在SPSS和R语言中的操作.③t检验(单样本.双独立样本.配对样本)在Excel. ...

  7. R语言ggplot2可视化:使用ggfortyify包中的autoplot函数自动可视化时间序列数据(Time Series Plot From a Time Series Object (ts))

    R语言ggplot2可视化:使用ggfortyify包中的autoplot函数自动可视化时间序列数据(Time Series Plot From a Time Series Object (ts)) ...

  8. R语言ggplot2可视化:使用ggpubr包的ggdensity函数可视化密度图、使用scale_x_continuous函数中的limits参数指定X轴数值范围

    R语言ggplot2可视化:使用ggpubr包的ggdensity函数可视化密度图.使用scale_x_continuous函数中的limits参数指定X轴数值范围 目录

  9. 【R语言中如何去除替换NA相关操作】

    R语言中如何去除替换NA相关操作 1.去除矩阵所有含NA的行 2.去除矩阵特定列中含NA的行 3.替换矩阵中的NA值为0 4.将矩阵中某一列的特殊值替换为NA 1.去除矩阵所有含NA的行 data=n ...

最新文章

  1. Codeforces Round #409 (Div. 2) C Voltage Keepsake(二分)
  2. java进度条字体颜色_java – Nimbus LF – 改变进度条的背景颜色
  3. Hadoop- MapReduce分布式计算框架原理
  4. psfaddtable - 添加一个Unicode字符表到控制台字体中
  5. 阿里云python服务器_Python服务器
  6. 尝试使用Java6API读取java代码
  7. ACE网络编程思考(二)
  8. GitHub上最火的40个Android开源项目(一)
  9. 字节小组长无意中得知整个部门的薪资,自己28K,手下却有35K,怎么办
  10. LoRa无线技术介绍
  11. 给mBlock添加扩展模块
  12. 卷积神经网络原理解析
  13. 推荐11个值得关注的网络安全公众号(年度精选)
  14. JAVA8数组相并_【Java笔记】Java8中数组(引用类型)、String、List、Set之间的相互转换问题...
  15. uchar和char、schar的区别
  16. Win10怎么通过ip添加网络打印机?
  17. c++STL 一级、二级空间配置器
  18. SAP中物料报废无法确定账户问题处理实例
  19. 奥斯汀分校 计算机教授 liu,顾海军(吉林大学通信工程学院通信工程系副教授)_百度百科...
  20. 现代希腊语字母表(待续)

热门文章

  1. 如何在微信小程序中加载自己的地图数据
  2. [轉貼] 华中科技大学校长李培根在2010届毕业典礼上的演讲全文
  3. TensorFlow安装配置,茫茫人海中一瞥
  4. 小程序海报和H5海报生成
  5. python pyc文件是啥_python pyc文件
  6. 怎么屏蔽还有照片_在朋友圈发男神照片,忘了屏蔽父母,老妈的回应亮了…
  7. [附源码]PHP计算机毕业设计天源旅游网站(程序+LW)
  8. pip更新命令以及使用清华镜像快速安装OpenCV-python
  9. html页面去边框线,HTML表格边框制作教程
  10. 记一次安装银河麒麟arm虚拟机,并在其上安装程序