R语言学习笔记9-数据过滤-分组-融合

R语言学习笔记9-数据过滤-分组-融合

  • 数据过滤
    • 基础数据过滤
    • 条件筛选数据
    • 使用dplyr包进行数据操作
      • select 函数
      • filter 函数
      • subset函数
  • 数据分组
    • 使用split()进行数据分组
    • 使用dplyr包进行数据分组
    • 使用data.table包进行数据分组
  • 数据融合
    • 使用merge()进行数据融合
    • 使用dplyr包进行数据融合
    • 使用data.table包进行数据融合

数据过滤

数据选择是指从数据结构(如数据框、列表等)中提取、筛选或操作数据的过程。从数据集中提取符合条件的行或列。这在数据分析和清洗过程中非常常见,可以从大量数据中快速筛选出需要的部分,R提供了包括基础的索引、逻辑条件、函数式编程方法等实现

基础数据过滤

使用方括号 [ ] 进行基本索引和切片

# 创建一个示例数据框
df <- data.frame(name = c("Alice", "Bob", "Charlie"),age = c(25, 30, 28),gender = c("F", "M", "M"),score = c(88, 92, 85)
)# 选择整列数据
df$name  # 选择名为"name"的列# 选择多列数据
df[, c("name", "score")]  # 选择名为"name"和"score"的列# 选择某行某列的数据
df[2, "age"]  # 选择第2行、"age"列的数据# 切片选择多行多列数据
df[1:2, c("name", "age")]  # 选择第1行到第2行的"name"和"age"列的数据

条件筛选数据

使用逻辑条件进行数据筛选

# 使用逻辑条件筛选数据
df[df$age > 25, ]  # 筛选年龄大于25岁的行数据# 多条件筛选
df[df$age > 25 & df$gender == "M", ]  # 筛选年龄大于25岁且性别为男性的行数据

使用dplyr包进行数据操作

# 加载 dplyr 包
library(dplyr)# 示例数据框
df <- data.frame(name = c("Alice", "Bob", "Charlie"),age = c(25, 30, 28),gender = c("F", "M", "M"),score = c(88, 92, 85)
)# 使用 dplyr 筛选和操作数据
# 选择特定列
df_selected <- df %>%select(name, age)# 条件筛选
df_filtered <- df %>%filter(age > 25)# 多条件筛选
df_multi_filter <- df %>%filter(age > 25, gender == "M")# 按条件计算新列
df_calculated <- df %>%mutate(score_adjusted = score * 1.1)  # 添加一个新的列,表示成绩调整后的值# 按组计算汇总统计
df_summary <- df %>%group_by(gender) %>%summarise(mean_age = mean(age), max_score = max(score))  # 按性别计算平均年龄和最高分print(df_selected)
print(df_filtered)
print(df_multi_filter)
print(df_calculated)
print(df_summary)

select 函数

select 函数用于选择数据框中的特定列。可按照列名或列索引来指定需要保留的列

# 创建一个示例数据框
df <- data.frame(A = c(1, 2, 3, 4, 5),B = c("a", "b", "c", "d", "e"),C = c(TRUE, FALSE, TRUE, FALSE, TRUE)
)# 使用 select 函数选择列 A 和 C
library(dplyr)
selected_df <- select(df, A, C)# 打印选择后的数据框
print(selected_df)

输出:

 A     C
1 1  TRUE
2 2 FALSE
3 3  TRUE
4 4 FALSE
5 5  TRUE

filter 函数

filter 函数用于根据指定的条件筛选数据框中的行

# 使用 filter 函数筛选符合条件的行
filtered_df <- filter(df, A > 2)# 打印筛选后的数据框
print(filtered_df)

输出:

  A B     C
1 3 c  TRUE
2 4 d FALSE
3 5 e  TRUE

subset函数

subset()函数可以根据行和列的逻辑条件从数据框中选择子集

# 使用 subset 函数筛选数据
# 筛选年龄大于25岁的行
filtered_df <- subset(df, age > 25)# 多条件筛选
filtered_df <- subset(df, age > 25 & gender == "M")# 查看处理后的数据
print(filtered_df)输出结果:name age gender score
2     Bob  30      M    92
3 Charlie  28      M    85

数据分组

数据分组是指将数据集按照某个或多个变量的值进行划分,以便对每个分组进行独立的分析或操作。数据分组在处理具有分类特征的数据集时特别有用,可帮助我们理解不同类别或组别之间的数据特征和差异

使用split()进行数据分组

在基础R中,可使用split()函数来根据某个变量的值将数据分组

# 创建一个示例数据框
df <- data.frame(group = c('A', 'B', 'A', 'B', 'A', 'B'),value = c(1, 2, 3, 4, 5, 6)
)# 使用split()函数按group列的值分组
grouped_data <- split(df$value, df$group)# 查看分组结果
print(grouped_data)

输出结果会显示两个分组A和B,每个分组中包含对应的value值。

使用dplyr包进行数据分组

dplyr包是tidyverse系列包中的一个,它提供了非常强大的数据处理功能,包括数据分组。在dplyr中,可使用group_by()函数来进行数据分组

# 加载dplyr包
library(dplyr)# 示例数据框(同上)
df <- data.frame(group = c('A', 'B', 'A', 'B', 'A', 'B'),value = c(1, 2, 3, 4, 5, 6)
)# 使用group_by()函数按group列的值分组
grouped_df <- df %>% group_by(group)# 查看分组结构(不直接显示分组内容,但可用于后续操作)
str(grouped_df)# 对分组数据进行操作,例如计算每组的平均值
summarized_df <- grouped_df %>% summarise(mean_value = mean(value))# 查看操作结果
print(summarized_df)

group_by()函数将数据按group列的值进行了分组,但分组后的数据框grouped_df本身不会直接显示分组的内容。然而,这个分组结构可以在后续的操作中使用,例如在summarise()函数中计算每个分组的统计量

使用data.table包进行数据分组

# 加载data.table包
library(data.table)# 将数据框转换为data.table对象
dt <- as.data.table(df)# 使用[, by=]语法进行分组和操作
summarized_dt <- dt[, .(mean_value = mean(value)), by = group]# 查看操作结果
print(summarized_dt)

在data.table中,使用[, by=]的语法来进行分组操作。上面的代码计算了每个group的平均value值

数据融合

数据融合(或称数据合并)指的是将多个数据集按照某些条件或列进行连接,以便进行综合分析或处理。常见的数据融合方式包括基于列连接(merge)、基于行连接(bind)、以及使用特定关系操作符(如join)等

使用merge()进行数据融合

# 创建示例数据框
df1 <- data.frame(ID = c(1, 2, 3),Name = c("Alice", "Bob", "Charlie"),Score1 = c(85, 92, 78)
)df2 <- data.frame(ID = c(2, 3, 4),Score2 = c(88, 95, 80)
)# 使用merge()函数按照ID列进行数据融合
merged_df <- merge(df1, df2, by = "ID", all = TRUE)  # 使用all = TRUE表示保留所有行# 查看融合后的数据
print(merged_df)

merge()函数按照ID列将df1和df2进行连接,结果包含了所有的ID,并将两个数据框中的数据合并在一起

使用dplyr包进行数据融合

dplyr包提供了更为简洁和灵活的数据处理方式,包括数据融合操作

# 加载dplyr包
library(dplyr)# 示例数据框(同上)
df1 <- data.frame(ID = c(1, 2, 3),Name = c("Alice", "Bob", "Charlie"),Score1 = c(85, 92, 78)
)df2 <- data.frame(ID = c(2, 3, 4),Score2 = c(88, 95, 80)
)# 使用dplyr的left_join()函数按照ID列进行左连接
merged_df <- left_join(df1, df2, by = "ID")# 查看融合后的数据
print(merged_df)

left_join()函数执行了按照ID列的左连接操作,即保留了df1中所有的行,并将df2中匹配的行数据合并到一起

使用data.table包进行数据融合

data.table是另一个效率高且功能强大的数据处理包,特别适用于大型数据集的操作

# 加载data.table包
library(data.table)# 示例数据框(同上)
df1 <- data.table(ID = c(1, 2, 3),Name = c("Alice", "Bob", "Charlie"),Score1 = c(85, 92, 78)
)df2 <- data.table(ID = c(2, 3, 4),Score2 = c(88, 95, 80)
)# 使用data.table的merge()函数按照ID列进行数据融合
merged_dt <- merge(df1, df2, by = "ID", all = TRUE)# 查看融合后的数据
print(merged_dt)

在data.table中,merge()函数的用法与基础R中的merge类似,但它在处理大数据时有更高的效率

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

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

相关文章

格式工厂转换视频分辨率

1、下载和安装 http://www.pcfreetime.com/formatfactory/CN/index.html 2、打开视频 3、设置分辨率等参数 也可以选择保持原分辨率 4、执行导出 5、打开输出所在位置

CCF-CSP认证考试 202406-2 矩阵重塑(其二) 100分题解

更多 CSP 认证考试题目题解可以前往&#xff1a;CSP-CCF 认证考试真题题解 原题链接&#xff1a; 202406-2 矩阵重塑&#xff08;其二&#xff09; 时间限制&#xff1a; 1.0 秒 空间限制&#xff1a; 512 MiB 题目背景 矩阵转置操作是将矩阵的行和列交换的过程。在转置过程…

前端开发之盒子模型

目录 盒子分类 display属性 盒子内部结构特征 padding填充区 border边框区 margin外边距 盒子width和height边界 盒子分类 块级盒子&#xff08;又叫块级元素、块级标签&#xff09; 特征&#xff1a;独占一行&#xff0c;对宽度高度支持 如&#xff1a;p div ul li h1…

完整且详细的Yolov8复现+训练自己的数据集

Yolov8 的源代码下载&#xff1a;ultralytics/ultralytics: NEW - YOLOv8 &#x1f680; in PyTorch > ONNX > CoreML > TFLite (github.com)https://github.com/ultralytics/ultralytics Yolov8的权重下载&#xff1a;Releases ultralytics/assets GitHubUltralyt…

Java 反射机制:概念、用途与示例

个人名片 &#x1f393;作者简介&#xff1a;java领域优质创作者 &#x1f310;个人主页&#xff1a;码农阿豪 &#x1f4de;工作室&#xff1a;新空间代码工作室&#xff08;提供各种软件服务&#xff09; &#x1f48c;个人邮箱&#xff1a;[2435024119qq.com] &#x1f4f1…

Go语言并发编程-案例_3

案例 并发目录大小统计 业务逻辑 统计目录的文件数量和大小&#xff08;或其他信息&#xff09;。示例输出&#xff1a; // 某个目录&#xff1a;2637 files 1149.87 MB 实现思路 给定一个或多个目录&#xff0c;并发的统计每个目录的size&#xff0c;最后累加到一起。 当…

Spring纯注解开发

前言 Spring3.0引入了纯注解开发的模式&#xff0c;框架的诞生是为了简化开发&#xff0c;那注解开发就是简化再简化。Spring的特性在整合MyBatis方面体现的淋漓尽致哦 一.注解开发 以前跟老韩学习SE时他就说&#xff1a;注解本质是一个继承了Annotation 的特殊接口,其具体实…

智慧农业新纪元:解锁新质生产力,加速产业数字化转型

粮食安全乃国家之根本&#xff0c;“浙江作为农业强省、粮食生产重要省份&#xff0c;在维护国家粮食安全大局中肩负着重大使命。浙江粮食产业经济年总产值已突破4800亿元&#xff0c;稳居全国前列&#xff0c;然而&#xff0c;同样面临着规模大而不强、质量效益有待提升、数字…

C语言 ——— 打印水仙花数

目录 何为水仙花数 题目要求 代码实现 何为水仙花数 “水仙花数”是指一个n位数&#xff0c;其各位数字的n次方之和等于该数本身 如&#xff1a;153 1^3 5^3 3^3&#xff0c;则153就是一个“水仙花数” 题目要求 求出0~100000的所有“水仙花数”并输出 代码实现 #i…

深入探索 SQL 中的 LIKE 右模糊匹配(LIKE RIGHT)与左模糊匹配(LIKE LEFT)

引言 在数据库操作中&#xff0c;LIKE 子句是执行模糊搜索的强大工具&#xff0c;用于匹配列中的数据与指定的模式。本文将详细介绍 LIKE 子句中的两种常用模式&#xff1a;右模糊匹配&#xff08;LIKE RIGHT&#xff09;和左模糊匹配&#xff08;LIKE LEFT&#xff09;&#…

python实现自动更新prometheus规则

由于公司需要监控目标类型较多&#xff0c;不能手动去改动prometheus规则然后reload&#xff0c;所以就通过python写了个程序自动更新prometheus配置 基本环境准备 python 3.10.10flask 2.3.2prometheus 2.52.0 基本流程 将接口传来的prometheus规则信息保存到数据表中取数…

人工智能算法工程师(高级)课程1-单类目标识别之人脸检测识别技术MTCNN模型介绍与代码详解

大家好&#xff0c;我是微学AI&#xff0c;今天给大家介绍一下人工智能算法工程师(高级)课程1-单类目标识别之人脸检测识别技术MTCNN模型介绍与代码详解。本文深入探讨了基于PyTorch的人脸检测与识别技术&#xff0c;详细介绍了MTCNN模型、Siamese network以及center loss、sof…

11、实现基于共享内存的二叉树set

初级代码游戏的专栏介绍与文章目录-CSDN博客 我的github&#xff1a;codetoys&#xff0c;所有代码都将会位于ctfc库中。已经放入库中我会指出在库中的位置。 这些代码大部分以Linux为目标但部分代码是纯C的&#xff0c;可以在任何平台上使用。 实现数组肯定不是我们的目标&a…

从数据库查询数据 写入Excel 写出JAVA代码

以下是一个示例代码,演示了如何从数据库中查询数据,然后将数据写入到Excel文件中: import java.io.FileOutputStream; import java.sql.Connection; import java.sql.DriverManager; import java.sql.ResultSet; import java.sql.Statement; import org.apache.poi.ss.user…

PostgreSQL创建表和自增序列

一、创建表&#xff1a; 注意&#xff1a; 1、在mysql没有序列的概念&#xff0c;id自增通过auto_increment实现&#xff1b; 2、pgsql没有auto_increment的概念&#xff0c;如何实现id自增&#xff1f;有两种方式&#xff1a; 方式一&#xff1a;创建序列&#xff0c;绑定…

面经学习(杭州实在智能实习)

个人评价 秃狼觉得本次的面试是有史以来难度最大的&#xff0c;问了很多陌生的八股文&#xff0c;项目问的比较少&#xff0c;估计是项目本来就没有什么亮点&#xff0c;也是第一次被面试官说菜的面试。不过在后续的学习上还是收获颇丰的。 1.说说你在实习中遇到的难点吧&…

K8S内存资源配置

在 Kubernetes (k8s) 中&#xff0c;资源请求和限制用于管理容器的 CPU 和内存资源。配置 CPU 和内存资源时&#xff0c;使用特定的单位来表示资源的数量。 CPU 资源配置 CPU 单位&#xff1a;Kubernetes 中的 CPU 资源以 “核” (cores) 为单位。1 CPU 核心等于 1 vCPU/Core…

SpringBoot RestHighLevelClient 按版本更新

SpringBoot RestHighLevelClient 按版本更新 1 查询2 更新 RestHighLevelClient 是 Elasticsearch 提供的一个用于与 Elasticsearch 集群交互的高级 REST 客户端。它是基于 Java 的客户端&#xff0c;旨在提供一种简单且功能丰富的方式来执行各种 Elasticsearch 操作&#xff0…

2024年海峡两岸创业青年研学交流项目火热开展中

7月17日&#xff0c;由浙江外国语学院国际商学院、创业学院主办的“文化之舟系两岸&#xff0c;潮头勇立浙商旗”——2024年海峡两岸大学生&#xff08;创业青年&#xff09;研学交流项目持续进行中。 上午&#xff0c;邵波副教授带领学生代表接待来自台湾的二十多名学生参加“…

利用 PHP 解锁 1688 详情 API 接口的秘密

在电商领域的探索中&#xff0c;1688 平台的商品详情数据无疑是一座宝藏。而通过 PHP 语言来解锁 1688 详情 API 接口的秘密&#xff0c;将为我们开启获取这一宝藏的大门。 一、深入了解 1688 详情 API 接口 1688 详情 API 接口提供了丰富的商品信息&#xff0c;包括商品描述、…