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

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类似,但它在处理大数据时有更高的效率

相关文章:

  • OpenCV 轮廓检测
  • PyTorch 深度学习实践-逻辑斯蒂回归
  • Three.JS 使用RGBELoader和CubeTextureLoader 添加环境贴图
  • Docker基本管理
  • VGMShield:揭秘视频生成模型滥用的检测与追踪技术
  • 【JVM基础01】——介绍-初识JVM运行流程
  • ESC(ELectronic Stability Control,电子稳定控制系统)
  • 数据的力量:Facebook如何通过数据分析驱动创新
  • IDEA关联数据库
  • 钡铼分布式 IO 系统 OPC UA边缘计算耦合器BL205
  • 【网络】Socket编程
  • 分布式唯一id的7种方案
  • Ubuntu22.04:安装Samba
  • Gitee使用教程2-克隆仓库(下载项目)并推送更新项目
  • SpringBoot解决Apache Tomcat输入验证错误漏洞
  • Android Volley源码解析
  • Docker容器管理
  • Github访问慢解决办法
  • HomeBrew常规使用教程
  • Js实现点击查看全文(类似今日头条、知乎日报效果)
  • leetcode46 Permutation 排列组合
  • Mac 鼠须管 Rime 输入法 安装五笔输入法 教程
  • Redis学习笔记 - pipline(流水线、管道)
  • scala基础语法(二)
  • 基于axios的vue插件,让http请求更简单
  • 前端性能优化——回流与重绘
  • 日剧·日综资源集合(建议收藏)
  • 使用API自动生成工具优化前端工作流
  • 学习Vue.js的五个小例子
  • LevelDB 入门 —— 全面了解 LevelDB 的功能特性
  • ​ArcGIS Pro 如何批量删除字段
  • # Kafka_深入探秘者(2):kafka 生产者
  • #我与Java虚拟机的故事#连载16:打开Java世界大门的钥匙
  • $.each()与$(selector).each()
  • (3)(3.5) 遥测无线电区域条例
  • (Redis使用系列) Springboot 整合Redisson 实现分布式锁 七
  • (附源码)springboot家庭财务分析系统 毕业设计641323
  • (三) diretfbrc详解
  • (十八)SpringBoot之发送QQ邮件
  • (十三)Maven插件解析运行机制
  • (一)Neo4j下载安装以及初次使用
  • (转)http-server应用
  • (转)创业的注意事项
  • (转)甲方乙方——赵民谈找工作
  • .net framework profiles /.net framework 配置
  • .NET Reactor简单使用教程
  • .NET 材料检测系统崩溃分析
  • .NET 发展历程
  • .Net 基于MiniExcel的导入功能接口示例
  • .NET 将多个程序集合并成单一程序集的 4+3 种方法
  • .net 提取注释生成API文档 帮助文档
  • .NET高级面试指南专题十一【 设计模式介绍,为什么要用设计模式】
  • :class的用法及应用
  • @Query中countQuery的介绍
  • @RequestParam @RequestBody @PathVariable 等参数绑定注解详解