当前位置: 首页 > article >正文

【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

相关文章:

【R语言】plyr包和dplyr包

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

《XSS跨站脚本攻击》

一、XSS简介 XSS全称&#xff08;Cross Site Scripting&#xff09;跨站脚本攻击&#xff0c;为了避免和CSS层叠样式表名称冲突&#xff0c;所以改为了XSS&#xff0c;是最常见的Web应用程序安全漏洞之一&#xff0c;位于OWASP top 10 2013/2017年度分别为第三名和第七名&…...

Golang:精通sync/atomic 包的Atomic 操作

在本指南中&#xff0c;我们将探索sync/atomic包的细节&#xff0c;展示如何编写更安全、更高效的并发代码。无论你是经验丰富的Gopher还是刚刚起步&#xff0c;你都会发现有价值的见解来提升Go编程技能。让我们一起开启原子运算的力量吧&#xff01; 理解Go中的原子操作 在快…...

代码随想录_二叉树

二叉树 二叉树的递归遍历 144.二叉树的前序遍历145.二叉树的后序遍历94.二叉树的中序遍历 // 前序遍历递归LC144_二叉树的前序遍历 class Solution {public List<Integer> preorderTraversal(TreeNode root) {List<Integer> result new ArrayList<Integer&g…...

详解Swift中 Sendable AnyActor Actor GlobalActor MainActor Task、await、async

详解Swift中 Sendable AnyActor Actor GlobalActor MainActor 的关联或者关系 及其 各自的作用 和 用法 以及与 Task、await、async&#xff1a; Sendable 协议 作用&#xff1a; Sendable 是一个协议&#xff0c;它用于标记可以安全地跨线程或异步任务传递的数据类型。符合 S…...

【C语言标准库函数】浮点数分解与构造: frexp() 和 ldexp()

目录 一、头文件 二、函数简介 2.1. frexp(double x, int *exp) 2.2. ldexp(double x, int exp) 三、函数实现&#xff08;概念性&#xff09; 3.1. frexp 的概念性实现 3.2. ldexp 的概念性实现 四、注意事项 五、示例代码 在C语言标准库中&#xff0c;frexp() 和 ld…...

【Git】tortoisegit使用配置

1. 安装 首先下载小乌龟&#xff0c;下载地址:https://tortoisegit.org/download/, 可以顺便下载语言包&#xff01; 安装时&#xff0c;默认安装就可以&#xff0c;一路next。也可以安装到指定目录中 目前已完成本地安装&#xff0c;接下来就需要与远程仓库建立连接&…...

Spring基于文心一言API使用的大模型

有时做项目我们可能会遇到要在项目中对接AI大模型 本篇文章是对使用文心一言大模型的使用总结 前置任务 在百度智能云开放平台中注册成为开发者 百度智能云开放平台 进入百度智能云官网进行登录&#xff0c;点击立即体验 点击千帆大模型平台 向下滑动&#xff0c;进入到模型…...

运维_Mac环境单体服务Docker部署实战手册

Docker部署 本小节&#xff0c;讲解如何将前端 后端项目&#xff0c;使用 Docker 容器&#xff0c;部署到 dev 开发环境下的一台 Mac 电脑上。 1 环境准备 需要安装如下环境&#xff1a; Docker&#xff1a;容器MySQL&#xff1a;数据库Redis&#xff1a;缓存Nginx&#x…...

[论文笔记] Deepseek-R1R1-zero技术报告阅读

启发: 1、SFT&RL的训练数据使用CoT输出的格式,先思考再回答,大大提升模型的数学与推理能力。 2、RL训练使用群体相对策略优化(GRPO),奖励模型是规则驱动,准确性奖励和格式化奖励。 1. 总体概述 背景与目标 报告聚焦于利用强化学习(RL)提升大型语言模型(LLMs)…...

Centos Ollama + Deepseek-r1+Chatbox运行环境搭建

Centos Ollama Deepseek-r1Chatbox运行环境搭建 内容介绍下载ollama在Ollama运行DeepSeek-r1模型使用chatbox连接ollama api 内容介绍 你好&#xff01; 这篇文章简单讲述一下如何在linux环境搭建 Ollama Deepseek-r1。并在本地安装的Chatbox中进行远程调用 下载ollama 登…...

一文读懂:TCP网络拥塞的应对策略与方案

TCP&#xff08;传输控制协议&#xff09;是互联网中广泛使用的可靠传输协议&#xff0c;它通过序列号、确认应答、重发控制、连接管理以及窗口控制等机制确保数据的可靠传输。然而&#xff0c;在网络环境中&#xff0c;由于多个主机共享网络资源&#xff0c;网络拥塞成为了一个…...

SpringSecurity:授权服务器与客户端应用(入门案例)

文章目录 一、需求概述二、开发授权服务器1、pom依赖2、yml配置3、启动服务端 三、开发客户端应用1、pom依赖2、yml配置3、SecurityConfig4、接口5、测试 一、需求概述 maven需要3.6.0以上版本 二、开发授权服务器 1、pom依赖 <dependency><groupId>org.springfr…...

Python与java的区别

一开始接触Python的时候&#xff0c;哔哩视频铺天盖地&#xff0c;看了很多人主讲的&#xff0c;要找适合自己口味的&#xff0c;各种培训机构喜欢在各种平台引流打广告&#xff0c;看了很多家&#xff0c;要么就是一个视频几个小时&#xff0c;长篇大论不讲原理只讲应用&#…...

doris:MySQL 兼容性

Doris 高度兼容 MySQL 语法&#xff0c;支持标准 SQL。但是 Doris 与 MySQL 还是有很多不同的地方&#xff0c;下面给出了它们的差异点介绍。 数据类型​ 数字类型​ 类型MySQLDorisBoolean- 支持 - 范围&#xff1a;0 代表 false&#xff0c;1 代表 true- 支持 - 关键字&am…...

SQL中 的exists用法

EXISTS 是 SQL 中的一个子查询条件&#xff0c;用于检查子查询是否返回任何行。如果子查询返回至少一行&#xff0c;则 EXISTS 返回 TRUE。 例如&#xff0c;查询有订单的客户列表&#xff1a; SELECT * FROM customers c WHERE EXISTS (SELECT 1 FROM orders o WHERE o.cust…...

案例1.spark和flink分别实现作业配置动态更新案例

目录 目录 一、背景 二、解决 1.方法1:spark broadcast广播变量 a. 思路 b. 案例 ① 需求 ② 数据 ③ 代码 2.方法2:flink RichSourceFunction a. 思路 b. 案例 ① 需求 ② 数据 ③ 代码 ④ 测试验证 测试1 测试2 测试3 一、背景 在实时作业(如 Spark Str…...

大数据学习之SparkSql

95.SPARKSQL_简介 网址&#xff1a; https://spark.apache.org/sql/ Spark SQL 是 Spark 的一个模块&#xff0c;用于处理 结构化的数据 。 SparkSQL 特点 1 易整合 无缝的整合了 SQL 查询和 Spark 编程&#xff0c;随时用 SQL 或 DataFrame API 处理结构化数据。并且支…...

鸿蒙UI(ArkUI-方舟UI框架)- 使用文本

返回主章节 → 鸿蒙UI&#xff08;ArkUI-方舟UI框架&#xff09; 文本使用 文本显示 (Text/Span) Text是文本组件&#xff0c;通常用于展示用户视图&#xff0c;如显示文章的文字内容。Span则用于呈现显示行内文本。 创建文本 string字符串 Text("我是一段文本"…...

Spider 数据集上实现nlp2sql训练任务

NLP2SQL&#xff08;自然语言处理到 SQL 查询的转换&#xff09;是一个重要的自然语言处理&#xff08;NLP&#xff09;任务&#xff0c;其目标是将用户的自然语言问题转换为相应的 SQL 查询。这一任务在许多场景下具有广泛的应用&#xff0c;尤其是在与数据库交互的场景中&…...

数据结构——【树模板】

#思路 1、 结点类&#xff1a; 属性&#xff1a;数据&#xff0c;孩子结点列表 功能1&#xff1a;认孩子&#xff1a; 前提&#xff1a;在父子都是结点的情况下 2. 树类&#xff1a; 属性&#xff1a;根节点&#xff0c;生成初始化的总结点 功能1&#xff1a;获取初始化…...

R 数组:高效数据处理的基础

R 数组&#xff1a;高效数据处理的基础 引言 在数据科学和统计分析领域&#xff0c;R 语言以其强大的数据处理和分析能力而备受推崇。R 数组是 R 语言中用于存储和操作数据的基本数据结构。本文将详细介绍 R 数组的创建、操作和优化&#xff0c;帮助读者掌握 R 数组的使用技巧…...

【DeepSeek】DeepSeek概述 | 本地部署deepseek

目录 1 -> 概述 1.1 -> 技术特点 1.2 -> 模型发布 1.3 -> 应用领域 1.4 -> 优势与影响 2 -> 本地部署 2.1 -> 安装ollama 2.2 -> 部署deepseek-r1模型 1 -> 概述 DeepSeek是由中国的深度求索公司开发的一系列人工智能模型&#xff0c;以其…...

npm link,lerna,pnmp workspace区别

npm link、Lerna 和 pnpm workspace 是三种不同的工具/功能&#xff0c;用于处理 JavaScript 项目的依赖管理和 Monorepo 场景。它们的核心区别如下&#xff1a; 1. npm link 用途 本地调试依赖&#xff1a;将本地开发的包&#xff08;Package A&#xff09;临时链接到另一个…...

ASP.NET Core 使用 WebClient 从 URL 下载

本文使用 ASP .NET Core 3.1&#xff0c;但它在.NET 5、 .NET 6和.NET 8上也同样适用。如果使用较旧的.NET Framework&#xff0c;请参阅本文&#xff0c;不过&#xff0c;变化不大。 如果想要从 URL 下载任何数据类型&#xff0c;请参阅本文&#xff1a;HttpClient 使用WebC…...

【CubeMX-HAL库】STM32F407—无刷电机学习笔记

目录 简介&#xff1a; 学习资料&#xff1a; 跳转目录&#xff1a; 一、工程创建 二、板载LED 三、用户按键 四、蜂鸣器 1.完整IO控制代码 五、TFT彩屏驱动 六、ADC多通道 1.通道确认 2.CubeMX配置 ①开启对应的ADC通道 ②选择规则组通道 ③开启DMA ④开启ADC…...

vue3 点击图标从相册选择二维码图片,并使用jsqr解析二维码(含crypto-js加密解密过程)

vue3 点击图标从相册选择二维码图片&#xff0c;并使用jsqr解析二维码&#xff08;含crypto-js加密解密过程&#xff09; 1.安装 jsqr 和 crypto-js npm install -d jsqr npm install crypto-js2.在util目录下新建encryptionHelper.js文件&#xff0c;写加密解密方法。 // e…...

kafka 3.5.0 raft协议安装

前言 最近做项目&#xff0c;需要使用kafka进行通信&#xff0c;且只能使用kafka&#xff0c;笔者没有测试集群&#xff0c;就自己搭建了kafka集群&#xff0c;实际上笔者在很早之前就搭建了&#xff0c;因为当时还是zookeeper&#xff08;简称ZK&#xff09;注册元数据&#…...

用Kibana实现Elasticsearch索引的增删改查:实战指南

在大数据时代&#xff0c;Elasticsearch&#xff08;简称 ES&#xff09;和 Kibana 作为强大的数据搜索与可视化工具&#xff0c;受到了众多开发者的青睐。Kibana 提供了一个直观的界面&#xff0c;可以方便地对 Elasticsearch 中的数据进行操作。本文将详细介绍如何使用 Kiban…...

Redis基础笔记

一、基础知识 连接方式 CLI (Command Line Interface)API (Application Programming Interface)GUI (Graphical User Interface) 启动 redis-server连接到Redis&#xff08;Redis CLI Client&#xff09; redis redis-cli telnet 127.0.0.1 6379退出 quit/exit查看过期时…...