【R语言】plyr包和dplyr包

一、plyr包

plyr扩展包主要是实现数据处理中的“分割-应用-组合”(split-apply-combine)策略。此策略是指将一个问题分割成更容易操作的部分,再对每一部分进行独立的操作,最后将各部分的操作结果组合起来。

plyr扩展包中的主要函数可以用**ply来概括:第一个 * 表示输入数据的结构,可选的数据结构有a(array)d(data.frame) l (list);第二个 * 表示输出数据的结构,可选的数据结构除了前面3种以外,还有“_”,它表示不输出,它的结果常用于绘图和建立缓存。

plyr包的12个主要函数
输入输出数组输出数据框输出数据列表无输出
数组aaplyadplyalplya_ply
数据框daplyddplydlplyd_ply
列表laplyldplyllplyl_ply

 按照输入数据的结构可以分为3类:

a*ply(.data, .margins, .fun, ..., .progress="none"):按照维度对数组进行“切片”;

d*ply(.data, .variables, .fun, ..., .progress="none"):按照一列或多列将数据框分为若干子集;

l*ply(.data, .fun, ..., .progress="none"):将列表的每个分量作为子集。

 参数详解:

.data:表示输入数据;

.margins:表示数组的边际,与apply函数的MARGIN类似,也可以为向量。用来描述输入数据将如何被分割为若干部分;

.variables:表示分组变量,可以有多个变量。用来描述输入数据将如何被分割为若干部分。

.fun:表示应用于数据各部分的函数,如果没有指定.fun,则表示从一种数据结构变为另一种数据结构;

...:表示传递给.fun的其它参数;

.progress:表示进度条的类型,none表示不显示进度条,它有text,tk和win三种进度条。

下面用datasets包中的鸢尾花数据集iris和iris3举例:

library(plyr)
iris.set <- iris
iris3.set <- iris3
class(iris)
class(iris3)

 

若不在.fun指定应用函数,**ply()函数的作用仅仅是将数据集从一种结构转换为另一种结构

iris.set1 <- dlply(iris.set, .variables="Species")
head(iris.set1)

二、dplyr包

plyr 包虽然功能强大,但在处理大数据集时可能会比较慢。对于更高效的数据处理,可以考虑使用 dplyr 包,它是 plyr 的一个现代替代品,提供了更快的速度和更直观的语法。

dplyr包主要针对数据框和tibble(tbl_df对象,一种增强的数据框)的操作。tibble数据结构在呈现大型数据集时非常友好。

下面以nyflights13扩展包中的flights数据集为例,此数据集中包含了336776次航班信息。(先安装install.packages("nyflights13")。

flights数据集就是一个tibble类型的数据框,它和一般数据框的区别是,当打印到控制台上时会附带上更多的信息。例如,行数和列数,每一列的数据类型,少量的数据示例及省略的行数、列数和列名。

 1、select()函数

用于选择需要的变量用在后续的分析上。

library(dplyr)
# 选择列变量
head(select(flights, year, flight, dest))

如果要从数据中删除一些变量,可以通过在变量前添加负号(-)来实现。另外,在select()函数中还可以使用一些辅助函数来完成对列的匹配操作:starts_with()、ends_with()、contains()、matches()、num_range()、one_of()和everything()等。

选取以“a”为首字母的变量

library(dplyr)
# 选择以“a”为首字母的变量
head(select(flights, starts_with("a")))

 选取包含“lay”的变量

library(dplyr)
head(select(flights, contains("lay")))

选取最后单词为“.time”的变量

library(dplyr)
head(select(flights, matches(".time")))

2、filter()函数

 用于根据条件对数据的列或者记录进行筛选。

# 选取在7月19日起飞,并且飞行距离大于800的AS或HA航空公司的航班信息
filter(flights, month==7,day==19,distance>800,carrier=="AS"|carrier=="HA")

对比使用with()函数的筛选方法,就会显得使用filter()函数更加简洁清晰。

with(flights,flights[month==7 & day==19 & distance > 800 & (carrier=="AS"|carrier=="HA"),])

3、arrange()函数

 若是依据多列数据进行排序,只需按列的顺序写进此函数中即可;如果是逆序排,只需在变量前面加负号或使用rev()函数即可(注意,逆排序中使用负号的情况仅限于数值变量)

# 依次按month、day、carrier、origin和dest对flights进行排序
head(arrange(flights,-month,-day,carrier,origin,dest))

4、mutate()函数

转换函数,它可以同时修改和增加若干个变量。与R语言中的内置的转换函数transform()相比,它的优势是可在同一段代码中使用刚建立的新变量。

library(dplyr)
library(nycflights13)
# 计算飞行节约的时间和平均每小时所节约的时间
flights1 <- mutate(flights, gain=arr_delay - dep_delay, gain_per_hour= gain/(air_time/60))
head(flights1$gain)
head(flights1$gain_per_hour)

 5、group_by()和summarise()函数

这两个函数往往一起使用,先对数据集进行分组,然后再按组进行汇总。

先按照航空公司进行分组:

# 先按航空公司进行分组
flights2 <- group_by(flights, carrier)
# 查看分组变量
group_vars(flights2)
# 查看各组的行数
group_size(flights2)

 然后对各航空公司数据进行汇总:

flights3 <- summarise(flights2, dep_delay_mean = mean(dep_delay, na.rm=T),arr_delay_mean = mean(arr_delay, na.rm=T),distance_sd = sd(distance, na.rm=T))
flights3

6、连接函数

inner_join()函数:用于内连接

left_join()函数:用于左连接

right_join()函数:用于右连接

full_join()函数:用于全连接

7、抽样函数

sample_n()函数:随机选出指定个数(样本容量)的样本数;

sample_frac()函数:随机选出指定百分比的样本数。

sample_n(flights,size=8)sample_frac(flights,size=0.10)

8、管道函数%>%

此函数可以通过不断地叠加,减少代码量和中间变量,这种写法极大地提高了代码的可读性和可维护性,特别是在进行数据分析和处理数据框(data frames)时。

在叠加过程中,%>%左边的结果将作为右边函数的第一个参数

dplyr包中的%>%操作符实际上是从magrittr包中借用的,但dplyr作为数据操作的一个核心包,使得这个操作符在数据科学社区中变得非常流行。

df <- data.frame(id = 1:5,name = c("Alice", "Bob", "Charlie", "David", "Eva"),score = c(85, 90, 95, 88, 92)
)# 使用%>%管道函数
filtered_sorted_df <- df %>%filter(score > 90) %>%  # 过滤出score大于90的行arrange(desc(score)) %>%  # 按score降序排列select(name, score)  # 选择name和score列print(filtered_sorted_df)

%>%管道函数可以与dplyr包中的其他函数(如mutatesummarisegroup_by等)结合使用:

flights4 <- flights  %>%sample_frac(size = 0.1) %>% # 随机抽取10%的样本select(one_of("carrier","month","day","dep_delay","arr_delay","air_time","distance")) %>% # 筛选carrier、month、day等几列变量mutate(gain = arr_delay - dep_delay,gain_per_hour = gain / (air_time / 60)) %>% # 计算飞行节约时间和平均每小时所节约的时间group_by(carrier,month) %>% # 按航空公司和月份summarise(gain = mean(gain,na.rm = TRUE),distance = mean(distance,na.rm =TRUE)) # 求gain和distance平均值flights4

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/14797.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

google 多模态aistudio Stream Realtime体验

参考&#xff1a; https://aistudio.google.com/live 使用gemini多模态能力&#xff0c;支持语音图像文字输入输出&#xff0c;实时交互体验 支持语音实时交互、摄像头加语音、屏幕视频语音 摄像头 屏幕共享

opentelemetry-collector 配置elasticsearch

一、修改otelcol-config.yaml receivers:otlp:protocols:grpc:endpoint: 0.0.0.0:4317http:endpoint: 0.0.0.0:4318 exporters:debug:verbosity: detailedotlp/jaeger: # Jaeger supports OTLP directlyendpoint: 192.168.31.161:4317tls:insecure: trueotlphttp/prometheus: …

四、OSG学习笔记-基础图元

前一章节&#xff1a; 三、OSG学习笔记-应用基础-CSDN博客https://blog.csdn.net/weixin_36323170/article/details/145514021 代码&#xff1a;CuiQingCheng/OsgStudy - Gitee.com 一、绘制盒子模型 下面一个简单的 demo #include<windows.h> #include<osg/Node&…

保姆级AI开发环境搭建

目录 windows下环境搭建1. Python环境搭建2. 下载vLLM2.1 安装CUDA2.2 安装Pytorch2.3 安装vllm 3. 部署Deepseek&#xff08;huggingface&#xff09;3.1 DeepSeek的优化建议 4. ollama快速部署Deepseek4.1 下载Ollama4.2 配置Ollma4.2 运行模型4.3 其他Ollama命令 linux下环境…

MySQL安装与配置

MySQL是常用的数据库&#xff0c;本篇记录MySQL的安装与配置。 1.首先到官网下载MySQL&#xff0c;这里下载5.7版本的。 https://downloads.mysql.com/archives/community/ 2.下载完成后&#xff0c;解压&#xff0c;然后设置环境变量 3.打开解压的要目录&#xff0c;创建一个…

如何参与开源项目

目的 就是说一下如何参与开源的项目&#xff0c;通过参与QXlsx来说明开源项目是如何参与的&#xff0c;其它的github上的开源项目&#xff0c;也是这样的流程。 关于GitHub: GitHub是一个面向开源及私有软件项目的托管平台&#xff0c;因为只支持Git作为唯一的版本库格式进行…

edu小程序挖掘严重支付逻辑漏洞

edu小程序挖掘严重支付逻辑漏洞 一、敏感信息泄露 打开购电小程序 这里需要输入姓名和学号&#xff0c;直接搜索引擎搜索即可得到&#xff0c;这就不用多说了&#xff0c;但是这里的手机号可以任意输入&#xff0c;只要用户没有绑定手机号这里我们输入自己的手机号抓包直接进…

【论文翻译】DeepSeek-V3论文翻译——DeepSeek-V3 Technical Report——第一部分:引言与模型架构

论文原文链接&#xff1a;DeepSeek-V3/DeepSeek_V3.pdf at main deepseek-ai/DeepSeek-V3 GitHub 特别声明&#xff0c;本文不做任何商业用途&#xff0c;仅作为个人学习相关论文的翻译记录。本文对原文内容直译&#xff0c;一切以论文原文内容为准&#xff0c;对原文作者表示…

Qt之设置QToolBar上的按钮样式

通常给QAction设置icon后,菜单栏的菜单项和工具栏(QToolBar)上对应的按钮会同时显示该icon。工具栏还可以使用setToolButtonStyle函数设置按钮样式,其参数为枚举值: enum ToolButtonStyle {ToolButtonIconOnly,ToolButtonTextOnly,ToolButtonTextBesideIcon,ToolButtonTe…

学习threejs,使用Lensflare模拟镜头眩光

&#x1f468;‍⚕️ 主页&#xff1a; gis分享者 &#x1f468;‍⚕️ 感谢各位大佬 点赞&#x1f44d; 收藏⭐ 留言&#x1f4dd; 加关注✅! &#x1f468;‍⚕️ 收录于专栏&#xff1a;threejs gis工程师 文章目录 一、&#x1f340;前言1.1 ☘️THREE.Lensflare 二、&…

opencv图像处理

注释详细 1.图像维度&#xff1a;打印出的结果分别为图片像素的横行、纵列和三原色彩色通道 import cv2 imgcv2.imread(pictures//3.png) print(img.shape) cv2.imshow("img",img)#窗口名、变量名 cv2.waitKey(0) 2.图像彩色通道&#xff1a;1张彩色图片&#xff…

harmonyOS生命周期详述

harmonyOS的生命周期分为app(应用)的生命周期和页面的生命周期函数两部分 应用的生命周期-app应用 在app.js中写逻辑,具体有哪些生命周期函数呢,请看下图: onCreated()、onShow()、onHide()、onDestroy()这五部分 页面及组件生命周期 着重说下onShow和onHide,分别代表是不是…

实验5 配置OSPFv2验证

实验5 配置OSPFv2验证 1.实验目的 &#xff08;1&#xff09;OSPFv2 验证的类型和意义。 &#xff08;2&#xff09;配置基于区域的 OSPFv2 简单口令验证和 MD5 验证的方法。 &#xff08;3&#xff09;配置基于链路的 OSPFv2 简单口令验证和 MD5 验证的方法。 2.实验准备 配置…

快速上手——.net封装使用DeekSeek-V3 模型

📢欢迎点赞 :👍 收藏 ⭐留言 📝 如有错误敬请指正,赐人玫瑰,手留余香!📢本文作者:由webmote 原创📢作者格言:新的征程,用爱发电,去丈量人心,是否能达到人机合一?开工大吉 新的一年就这么水灵灵的开始了,在这里,祝各位读者新春快乐,万事如意! 新年伊…

国产化创新 守护开放边界网络安全

当今数字化浪潮的席卷下&#xff0c;企业、医院、政府部门等各类机构的信息化建设正以前所未有的速度推进。 在这个数字化转型的关键时期&#xff0c;尤其是在涉及国家核心利益和敏感数据的领域&#xff0c;我们不仅要追求技术的先进性&#xff0c;更要确保安全性和自主可控性…

基于Java的在线购物系统的设计与实现

引言 课题背景 随着Internet国际互联网的发展&#xff0c;越来越多的企业开始建造自己的网站。基于Internet的信息服务&#xff0c;商务服务已经成为现代企业一项不可缺少的内容。很多企业都已不满足于建立一个简单的仅仅能够发布信息的静态网站。现代企业需要的是一个功能强…

cefsharp131升级132测试(WinForms.NETCore)

一、升级&#xff08;Nuget&#xff09; 版本说明&#xff08;readme&#xff09;:最低.NET Core3.1 (NET5.0) Visual C 2019 Redist 二、试运行、兼容性测试 三、后记说明 支持H264版本推荐版本63,79,84,88,100,111,125&#xff08;支持h264和pdf预览&#xff09; 其他H264版…

C#中深度解析BinaryFormatter序列化生成的二进制文件

C#中深度解析BinaryFormatter序列化生成的二进制文件 BinaryFormatter序列化时,对象必须有 可序列化特性[Serializable] 一.新建窗体测试程序BinaryDeepAnalysisDemo,将默认的Form1重命名为FormBinaryDeepAnalysis 二.新建测试类Test Test.cs源程序如下: using System; us…

【实用教程】在 Android Studio 中连接 MuMu 模拟器

MuMu 模拟器是一个非常流行的安卓模拟器&#xff0c;特别适合开发人员进行应用测试&#xff0c;我使用它的根本原因在于Android Studio自带的AVM实现是太难用了&#xff0c;但是Mumu模拟器启动以后不会自动被Android Studio识别到&#xff0c;但是其他模拟器都是能够正常被Andr…

LLAMA-Factory安装教程(解决报错cannot allocate memory in static TLS block的问题)

步骤一&#xff1a; 下载基础镜像 # 配置docker DNS vi /etc/docker/daemon.json # daemon.json文件中 { "insecure-registries": ["https://swr.cn-east-317.qdrgznjszx.com"], "registry-mirrors": ["https://docker.mirrors.ustc.edu.c…