接下来的部分,我们主要介绍 R 的一个用于数据科学的集成包 tidyverse,并用它所包含的各种 R 包来进行数据处理。
tidyverse 中所有的包具有同样的设计理念、语法以及数据结构
主要包含如下 R 包:包名描述ggplot2鼎鼎大名的画图包,不用过多介绍dplyr提供了一组便利的数据操作语法tidyr数据的整洁之道readr提供便利的方式读取矩阵数据(如 csv, tsv 和 fwf 等)purrr增强 R 的函数编程,避免 for 循环tibble对 data.frame 的升级封装stringr处理字符串,前面已经介绍过forcats对 factor 替代
还有一些读取其他数据文件的包,如DBI: 关系数据库haven: SPSS, Stata, 和 SAS 数据.httr: 网络 APIreadxl: .xls 和 .xlsx 文件rvest: 网络爬虫.jsonlite: JSON 数据xml2: XML 文件处理时间数据的lubridate: 时间和日期hms: 持续时间或时间值,并以 hh:mm:ss 格式显示它们。blob: 二进制数据提高编程效率magrittr: 提供了一系列的管道操作符,接下来我们要详细介绍glue: paste 的替代,更容易的数据和字符串的组合magrittr 包定义了一组高效的管道操作工具包,通过管道的连接方式,让数据或表达式的传递更高效
从左到右构造数据操作序列(而不是从内到外)避免函数嵌套最小化对局部变量和函数定义的需求使在操作序列中的任意位置添加步骤变得容易直接安装 tidyverse,会将该包下的所有包都装上,就不用一个个安装了
#Theeasiestwaytogetmagrittristoinstallthewholetidyverse:
install.packages("tidyverse")
如果你不想全部安装,只想要 magrittr 一个包,或其中几个包
#Alternatively,installjustmagrittr:
install.packages("magrittr")
安装开发版
#OrthedevelopmentversionfromGitHub:
#install.packages("devtools")
devtools::install_github("tidyverse/magrittr")
导入全部导入
library(tidyverse)
导入一个包
library(magrittr)
magrittr 主要包括 4 个管道操作符:
%>%: 向右操作符%T>%: Tee 操作符,向左操作符%$%: 解释操作符%<>%: 复合赋值管道操作符将左边的结果传递给右边的函数作为第一个参数值,其结果可以继续向右边传递
基本管道操作x %>% f => f(x)x %>% f(y) => f(x, y)x %>% f %>% g %>% h => h(g(f(x)))默认将 %>% 左边的 x 作为右边的(如 f 函数)的第一个参数
示例
>x<-3
>f<-function(x,y=1){return(x+y)}
>x%>%f
[1]4
>x%>%f(2)
[1]5
参数占位符x %>% f(y, .) => f(y, x)x %>% f(y, z = .) => f(y, z = x)使用 . 占位符,表示管道左边传过来的变量
>x%>%f(y=.,x=5)
[1]8
>x%>%f(y=3,x=.)
[1]6
对属性重用占位符在右侧表达式中可以多次使用占位符。但是,当占位符仅出现在嵌套表达式中时,magrittr 仍将应用第一个参数规则。因为在大多数情况下,这会产生更干净的代码
x%>%f(y=nrow(.),z=ncol(.))=>f(x,y=nrow(x),z=ncol(x))
可以通过将右侧表达式用大括号包裹来取消这一规则
x%>%{f(y=nrow(.),z=ncol(.))}=>f(y=nrow(x),z=ncol(x))
示例:
>x<-matrix(1:12,nrow=3,ncol=4)
>f<-function(x,y,z){return(x*y*z)}
>x%>%f(y=nrow(.),z=ncol(.))
[,1][,2][,3][,4]
[1,]124884120
[2,]246096132
[3,]3672108144
>x%>%{f(y=nrow(.),z=ncol(.))}
Errorinf(y=nrow(.),z=ncol(.)):缺少参数"x",也没有缺省值
>x%>%{f(1,y=nrow(.),z=ncol(.))}
[1]12
绑定函数任何以 . 开头的管道序列将会返回一个一元函数
f<-.%>%cos%>%sin
#isequivalentto
f<-function(.)sin(cos(.))
传递到代码块>rnorm(10)%>%multiply_by(5)%>%add(5)%>%
+{
+print("Mean:",mean(.))
+sort(.)%>%head(5)
+}
[1]"Mean:"
[1]-0.7076385-0.32301330.92980340.93900842.5007525
传递到函数>rnorm(10)%>%add(1)%>%`*`(10)%>%(
+function(x){
+if(x[1]>5){
+x-5
+}elsex
+}
+)
[1]-5.0560515.21468116.12249522.31160322.43136215.8282501.785964-2.96927326.003416
[10]12.304749
与 %>% 的区别是其结果不能向右传递,而是将 %T>% 左边的结果继续向右传递下去,%T>% 通常用来输出图形、打印结果到屏幕或者输出到文件,然后继续后面的 %>% 操作
而其左边的值相当于做了两次传递,分别传递给 %T>% 右侧表达式以及其后面的 %>% 管道符的右侧表达式。
也可以理解为在一串管道序列中插入了一个操作,但并不会影响其后续的管道序列
示例:
>a<-5
>a%>%cos%T>%print%>%sin
[1]0.2836622
[1]0.2798734
>x%>%cos%T>%hist%>%sin
[,1][,2][,3][,4]
[1,]0.5143953-0.60808300.6844888-0.744023079
[2,]-0.40423920.2798734-0.14498720.004425684
[3,]-0.83602190.8192892-0.79019690.747209958
通常左边是数据框,%$% 右边的函数可直接使用该数据框中的变量
示例:
>x<-matrix(1:12,nrow=3,ncol=4)
>data.frame(x=x[,1],y=x[,2],z=x[,3])%$%.[which(x>5),]
[1]xyz
<0行>(或0-长度的row.names)
>data.frame(x=x[,1],y=x[,2],z=x[,3])%$%.[which(y>5),]
xyz
3369
相当于
>df<-data.frame(x=x[,1],y=x[,2],z=x[,3])
>df[which(df$y>5),]
xyz
3369
只能出现在所有管道符的第一个,用于在一长串处理管道操作之后直接将值赋值到最左边的对象上
示例:
>a<-1:10
>print(a)
[1]12345678910
>a%<>%exp%>%sqrt
>print(a)
[1]1.6487212.7182824.4816897.38905612.18249420.08553733.11545254.59815090.017131
[10]148.413159
可以看出,a 的值变为 sqrt(exp(a))
除了上面 4 个主要的管道符之外,还重新定义了一些函数操作符,如下
示例
>seq(10)%>%`*`(5)%>%`+`(5)
[1]10152025303540455055
>seq(10)%>%multiply_by(5)%>%add(5)
[1]10152025303540455055
版权声明:我们致力于保护作者版权,注重分享,被刊用文章【r语言for循环语句案例(R)】因无法核实真实出处,未能及时与作者取得联系,或有版权异议的,请联系管理员,我们会立即处理! 部分文章是来自自研大数据AI进行生成,内容摘自(百度百科,百度知道,头条百科,中国民法典,刑法,牛津词典,新华词典,汉语词典,国家院校,科普平台)等数据,内容仅供学习参考,不准确地方联系删除处理!;
工作时间:8:00-18:00
客服电话
电子邮件
beimuxi@protonmail.com
扫码二维码
获取最新动态
