【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

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

oscp备考,oscp系列——VulnOSv2靶场,两种方法获取低权限shell

前言 oscp备考&#xff0c;oscp系列——VulnOSv2靶场&#xff0c;两种方法获取低权限shell 难度简单 对于低权限shell获取涉及&#xff1a;drupal 7 getshell漏洞&#xff0c;opendocman sql注入&#xff0c;ssh连接对于提权&#xff1a;内核提权 下载地址&#xff1a; http…

东方财富股吧发帖与评论爬虫

东方财富股吧发帖与评论爬虫 东方财富股吧爬虫 写在开头项目介绍主要功能文件介绍爬取逻辑 a. 爬取帖子信息b. 爬取评论信息 使用步骤 1. 下载代码2. MongoDB 安装3. Webdriver 安装4. 运行 main.py5. 查看数据 踩过的坑附录&#xff08;运行结果&#xff09; 东方财富股吧爬…

wxWidgets生成HTML文件,带图片转base64数据

编译环境大家可以看我之前的文章,CodeBlocks + msys2 + wx3.2,win10 这里功能就是生成HTML文件,没用HTML库,因为是自己固定的格式,图片是一个vector,可以动态改变数量的。 效果如下: #include <wx/string.h> #include <wx/file.h> #include <wx/ima…

网络编程 day2

题目 代码 服务器 typedef char DataType[32]; //普通节点数据类型typedef struct NODE {union{DataType data; //普通节点数据域int len; //头节点数据域};struct NODE *next; //指针域 }node,*nodePtr;struct PACK {int size; //告知 通信传输的数据的大小int type; //决定…

【鸿蒙HarmonyOS Next实战开发】实现ArkTS/JS和C/C++的交互-Node-API

一、HarmonyOS Node-API简介 在HarmonyOS应用开发中&#xff0c;通常以ArkTS/JS语言为主&#xff0c;但在一些特殊场景下&#xff0c;例如游戏开发、物理模拟等&#xff0c;由于对性能、效率等有较高要求&#xff0c;需要借助现有的C/C库来实现。为了满足这种需求&#xff0c;…

Postgresql的三种备份方式_postgresql备份

这种方式可以在数据库正在使用的时候进行完整一致的备份&#xff0c;并不阻塞其它用户对数据库的访问。它会产生一个脚本文件&#xff0c;里面包含备份开始时&#xff0c;已创建的各种数据库对象的SQL语句和每个表中的数据。可以使用数据库提供的工具pg_dumpall和pg_dump来进行…

51单片机之使用Keil uVision5创建工程以及使用stc-isp进行程序烧录步骤

一、Keil uVision5创建工程步骤 1.点击项目&#xff0c;新建 2.新建目录 3.选择目标机器&#xff0c;直接搜索at89c52选择&#xff0c;然后点击OK 4.是否添加起吊文件&#xff0c;一般选择否 5.再新建的项目工程中添加文件 6.选择C文件 7.在C文件中右键&#xff0c;添加…

基础篇05-直方图操作

本节将简要介绍Halcon中有关图像直方图操作的算子&#xff0c;重点介绍直方图获取和显示两类算子&#xff0c;以及直方图均衡化处理算子。 目录 1. 引言 2. 获取并显示直方图 2.1 获取&#xff08;灰度&#xff09;直方图 (1) gray_histogram (2) gray_histo_abs (3) gr…

3.攻防世界 weak_auth

题目描述提示 是一个登录界面&#xff0c;需要密码登录 进入题目页面如下 弱口令密码爆破 用1 or 1 #试试 提示用admin登录 则尝试 用户名admin密码&#xff1a;123456 直接得到flag 常用弱口令密码&#xff08;可复制&#xff09; 用户名 admin admin-- admin or -- admin…

金蛇祈福,鸿运开年!广州白云皮具城2025开市大吉!

锣鼓一响&#xff0c;黄金万两&#xff01;2月6日大年初九&#xff0c;广州白云皮具城举行盛大的醒狮开市仪式&#xff01;象征吉祥如意的醒狮&#xff0c;将好运、财运传递给全体商户和八方来客。 醒狮点睛 金鼓一响黄金万两&#xff0c;十头醒狮登台&#xff0c;董事总经理刘…

【Axure教程】标签版分级多选下拉列表

分级多选下拉列表是指一个下拉列表&#xff0c;它包含多个层次的选项&#xff0c;用户可以选择一个或多个选项。这些选项通常是根据某种层级关系来组织的&#xff0c;例如从上到下有不同的分类或者过滤条件&#xff0c;用户选择上层选项后&#xff0c;下层选项会发生变化&#…

SpringBoot中的多环境配置管理

SpringBoot中的多环境配置管理 文章目录 SpringBoot中的多环境配置管理SpringBoot中的多环境配置管理 多环境配置的概述1. 为什么需要多环境配置&#xff1f;2. Spring Boot 中如何实现多环境配置&#xff1f;3. 多环境配置的应用场景4. 如何实现配置隔离&#xff1f; Spring B…

SOME/IP报文格式及发现协议详解

在之前的文章中&#xff0c;我们介绍了SOME/IP协议的几种服务接口。在本篇博客中&#xff0c;主要介绍some/ip协议传输的header报文格式以及SOME/IP-SD发现协议。 目录 流程 报文格式 Message ID Length Request ID protocal version/Interface Version Message Type…

使用Ollama本地部署deepseek

1、下载安装Ollama 前往下载页面 https://ollama.com/download下载好安装包&#xff0c;如同安装软件一样&#xff0c;直接安装即可 win中默认为C盘&#xff0c;如果需要修改到其他盘&#xff0c;查找具体教程 运行list命令&#xff0c;检查是否安装成功 2、修改模型下载的…

约束布局属性学习

1、layout_constraintHorizontal_bias layout_constraintHorizontal_bias 是 ConstraintLayout 中的一个重要属性&#xff0c;用于控制一个视图在父视图或相关视图中水平位置的偏移。这种偏移通过在0到1之间的浮点值来设置&#xff0c;0代表完全靠近左边或起始位置&#xff0c…

Windows双网卡冲突导致网页加载过慢的解决方法 (修改跃点无效 远程桌面连接)

【本文发布于https://blog.csdn.net/Stack_/article/details/145494160&#xff0c;未经许可不得转载&#xff0c;转载须注明出处】 办公室内&#xff0c;我的笔记本和台式机都连接WIFI进行上网&#xff0c;网段是192.168.0.x&#xff0c;网关192.168.0.101 现在要通过Windows自…

轻量级服务器http-server

安装 sudo npm install http-server -g 运行 1. 直接去到要跑起来的目录&#xff0c;在终端输入 cd xxxx文件夹http-server //只输入http-server的话&#xff0c;更新了代码后&#xff0c;页面不会同步更新http-server -c-1 //同步更新页面http-server -a 127.0.0.1 -p 808…

代码随想录算法【Day38】

Day38 322. 零钱兑换 思路 完全背包 代码 class Solution { public:int coinChange(vector<int>& coins, int amount) {vector<int> dp(amount 1, INT_MAX);dp[0] 0;for (int i 0; i < coins.size(); i) { // 遍历物品for (int j coins[i]; j <…

python+opencv+open3d实现鼠标手画多边形裁剪分割点云操作

👑主页:吾名招财 👓简介:工科学硕,研究方向机器视觉,爱好较广泛… ​💫签名:面朝大海,春暖花开! python+opencv+open3d实现鼠标手画多边形裁剪分割点云操作 引言使用效果:代码pcd_roi_crop.py:引言 当我们想对一个不规则物体的图像或者点云裁剪时,直接手动输入…

STM32的HAL库开发---通用定时器(TIMER)---定时器脉冲计数

一、脉冲计数实验原理 1、 外部时钟模式1&#xff1a;核心为蓝色部分的时基单元&#xff0c;时基单元的时钟源可以来自四种&#xff0c;分别是内部时钟PCLK、外部时钟模式1&#xff0c;外部时钟模式2、内部定时器触发&#xff08;级联&#xff09;。而脉冲计数就是使用外部时钟…