当前位置: 首页 > 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类似,但它在处理大数据时有更高的效率

相关文章:

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

R语言学习笔记9-数据过滤-分组-融合 数据过滤基础数据过滤条件筛选数据使用dplyr包进行数据操作select 函数filter 函数subset函数 数据分组使用split()进行数据分组使用dplyr包进行数据分组使用data.table包进行数据分组 数据融合使用merge()进行数据融合使用dplyr包进行数据融…...

GESP CCF C++ 八级认证真题 2024年6月

第 1 题 GESP活动期间&#xff0c;举办方从获胜者ABCDE五个人中选出三个人排成一队升国旗&#xff0c;其中A不能排在队首&#xff0c;请问 有多少种排法&#xff1f; A.24 B.48 C.32 D.12 第 2 题 7进制数235转换成3进制数是&#xff08; &#xff09;。 A. 11121 B. 11…...

Spring Boot 单元测试什么时候需要添加 @RunWith

建立 Spring Boot 单元测试方法一般依赖于 JUnit4 或 JUnit5 框架。 在高版本的 Spring Boot 中&#xff0c;一般默认用的是 JUnit5。此时通过添加 SpringBootTest 注解&#xff0c;即可成功注入相关的 bean 对象&#xff0c;并进行测试。 import org.junit.jupiter.api.Test…...

鸿蒙OpenHarmony Native API【HiLog】

HiLog Overview Description: HiLog模块实现日志打印功能。 开发者可以通过使用这些接口实现日志相关功能&#xff0c;输出日志时可以指定日志类型、所属业务领域、日志TAG标识、日志级别等。 syscap SystemCapability.HiviewDFX.HiLog Since: 8 Summary Files File …...

Pycharm 和虚拟环境的那些事?

背景: 我既有 python 又有Anaconda Pycharm新建虚拟环境: 只说两种方式 通过Virualenv Environment新建: 这里我们勾选上 Make available to all projects ,之后点击&#x1f197; 然后可以发现只有非常少的包,因为没有勾选继承 编译器的包 创建的虚拟环境一般目录如下&…...

rancher2里面的containerd的使用

rancher2使用containerd了&#xff0c;在node上去跑docker命令找不到以前的那些pod了&#xff0c;查了很久才设置好crictl的配置 kubectl get nodes -o wide NAME STATUS ROLES AGE VERSION INTERNAL-IP EXTERNAL-IP O…...

Python数据风险案例54——人工智能热门概念股爬虫分析其价值(三因子模型)

案例背景 人工智能概念如火如荼的夏天&#xff0c;在这个2024年&#xff0c;我觉得需要提早布局一下这个概念。所以我们找一下A股里面人们的人工智能概念股&#xff0c;然后分析他们的数据应用三因子模型&#xff0c;也就是最经典的资本资产定价模型的衍生版去研究他们各自的投…...

【HarmonyOS开发】Navigation使用

简介 Navigation是路由容器组件&#xff0c;包括单栏(Stack)、分栏(Split)和自适应(Auto)三种显示模式。适用于模块内和跨模块的路由切换。 在页面跳转时&#xff0c;应该使用页面路由router&#xff0c;在页面内的页面跳转时&#xff0c;建议使用Navigation达到更好的转场动效…...

计算机网络参考模型与5G协议

目录 OSI七层参考模型OSI模型vsTCP/IP模型TCP/IP协议族的组成 OSI七层参考模型 分层功能应用层网络服务与最终用户的一个接口表示层数据的表示,安全,压缩会话层建立,管理,终止会话传输层定义传输数据的协议端口号,以及流控和差错校验网络层进行逻辑地址寻址,实现不同网路之间的…...

docker自建rustdesk-server远程桌面

rustdesk简介 RustDesk 是一款可以平替 TeamViewer 的开源软件&#xff0c;旨在提供安全便捷的自建方案。 RustDesk 是一款功能齐全的远程桌面应用&#xff0c;具有以下特性&#xff1a; 支持 Windows、macOS、Linux、iOS、Android、Web 等多个平台。支持 VP8 / VP9 / AV1 …...

海外抖音黑屏是网络问题还是硬件问题?

随着海外抖音&#xff08;TikTok&#xff09;在全球范围内的普及&#xff0c;越来越多的用户开始体验这一短视频社交平台。然而&#xff0c;不少用户在使用过程中遇到了黑屏问题&#xff0c;这让人不禁疑惑&#xff1a;这究竟是网络问题还是硬件问题&#xff1f; 首先&#xf…...

为了实现接口缓存,专门写了个缓存库 f-cache-memory

问题起因 起因是某次发版之后&#xff0c;服务器接口压力过大&#xff0c;当场宕机&#xff0c;排查之后发现有个接口在首页被调十来次&#xff08;六七年的老项目了&#xff0c;都是泪呀&#xff09;&#xff0c;后端反馈这个接口的sql很复杂&#xff0c;很耗性能&#xff0c…...

actual combat 35 —— es

一、windows中es执行步骤 参考&#xff1a;https://blog.csdn.net/qq_21197507/article/details/115076913 下es安装包下es前端gitHub代码&#xff0c;然后npm -i安装&#xff0c;npm run start 启动安装kibana 二、遇到的问题 1. 第二步安装前端代码依赖报错 npm ERR! co…...

android R ext4 image打包脚本介绍

一、Android R打包指令使用介绍 &#xff08;1&#xff09;mkuserimg_mke2fs #./mkuserimg_mke2fs --help usage: mkuserimg_mke2fs [-h] [--android_sparse] [--journal_size JOURNAL_SIZE][--timestamp TIMESTAMP] [--fs_config FS_CONFIG][--product_out PRODUCT_OUT][--b…...

美式键盘 QWERTY 布局的来历

注&#xff1a;机翻&#xff0c;未校对。 The QWERTY Keyboard Is Tech’s Biggest Unsolved Mystery QWERTY 键盘是科技界最大的未解之谜 It’s on your computer keyboard and your smartphone screen: QWERTY, the first six letters of the top row of the standard keybo…...

ETL数据同步之DataX,附赠一套DataX通用模板

今天跟大家分享数据同步datax的模板&#xff0c;小伙伴们简单直接借鉴使用。 还记得上一篇关于大数据DS调度工具的分享嘛&#xff1f; 主流大数据调度工具DolphinScheduler之数据ETL流程-CSDN博客 里面的核心就是采用了DATAX的数据同步原理。 一&#xff0c;什么是DataX D…...

[论文笔记] CT数据配比方法论——1、Motivation

我正在写这方面的论文,感兴趣的可以和我一起讨论!!!!!! Motivation 1、探测原有模型的配比: 配比 与 ppl, loss, bpw, benchmark等指标 之间的关系。 2、效果稳定的配比:配比 与 模型效果 之间的规律。 Experiments 1、主语言(什么语言作为主语言,几种主语言?…...

某4G区域终端有时驻留弱信号小区分析

这些区域其实是长时间处于连接态的电信卡4G终端更容易出现。 出现问题时都是band1 100频点下发了针对弱信号的1650频点的连接态A4测量事件配置&#xff08;其阈值为-106&#xff09;。而这个条件很容易满足&#xff0c;一旦下发就会切到band3 1650频点。 而1650频点虽然下发ban…...

【体外诊断】ARM/X86+FPGA嵌入式计算机在免疫分析设备中的应用

体外诊断 信迈提供基于Intel平台、AMD平台、NXP平台的核心板、2.5寸主板、Mini-ITX主板、4寸主板、PICO-ITX主板&#xff0c;以及嵌入式准系统等计算机硬件。产品支持GAHDMI等独立双显&#xff0c;提供丰富串口、USB、GPIO、PCIe扩展接口等I/O接口&#xff0c;扩展性强&#xf…...

Linux上启动和停止jar

linux 后台运行jar 在Linux系统中&#xff0c;要想让jar包在后台运行&#xff0c;可以使用nohup命令和&符号。nohup命令可以使进程在后台不受挂起信号影响的执行&#xff0c;而&符号则是将任务放入后台执行。 以下是一个简单的命令示例&#xff0c;它将启动一个jar包…...

Qt Http Server模块功能及架构

Qt Http Server 是 Qt 6.0 中引入的一个新模块&#xff0c;它提供了一个轻量级的 HTTP 服务器实现&#xff0c;主要用于构建基于 HTTP 的应用程序和服务。 功能介绍&#xff1a; 主要功能 HTTP服务器功能&#xff1a; 支持 HTTP/1.1 协议 简单的请求/响应处理模型 支持 GET…...

数据链路层的主要功能是什么

数据链路层&#xff08;OSI模型第2层&#xff09;的核心功能是在相邻网络节点&#xff08;如交换机、主机&#xff09;间提供可靠的数据帧传输服务&#xff0c;主要职责包括&#xff1a; &#x1f511; 核心功能详解&#xff1a; 帧封装与解封装 封装&#xff1a; 将网络层下发…...

【论文阅读28】-CNN-BiLSTM-Attention-(2024)

本文把滑坡位移序列拆开、筛优质因子&#xff0c;再用 CNN-BiLSTM-Attention 来动态预测每个子序列&#xff0c;最后重构出总位移&#xff0c;预测效果超越传统模型。 文章目录 1 引言2 方法2.1 位移时间序列加性模型2.2 变分模态分解 (VMD) 具体步骤2.3.1 样本熵&#xff08;S…...

Yolov8 目标检测蒸馏学习记录

yolov8系列模型蒸馏基本流程&#xff0c;代码下载&#xff1a;这里本人提交了一个demo:djdll/Yolov8_Distillation: Yolov8轻量化_蒸馏代码实现 在轻量化模型设计中&#xff0c;**知识蒸馏&#xff08;Knowledge Distillation&#xff09;**被广泛应用&#xff0c;作为提升模型…...

Mysql8 忘记密码重置,以及问题解决

1.使用免密登录 找到配置MySQL文件&#xff0c;我的文件路径是/etc/mysql/my.cnf&#xff0c;有的人的是/etc/mysql/mysql.cnf 在里最后加入 skip-grant-tables重启MySQL服务 service mysql restartShutting down MySQL… SUCCESS! Starting MySQL… SUCCESS! 重启成功 2.登…...

适应性Java用于现代 API:REST、GraphQL 和事件驱动

在快速发展的软件开发领域&#xff0c;REST、GraphQL 和事件驱动架构等新的 API 标准对于构建可扩展、高效的系统至关重要。Java 在现代 API 方面以其在企业应用中的稳定性而闻名&#xff0c;不断适应这些现代范式的需求。随着不断发展的生态系统&#xff0c;Java 在现代 API 方…...

认识CMake并使用CMake构建自己的第一个项目

1.CMake的作用和优势 跨平台支持&#xff1a;CMake支持多种操作系统和编译器&#xff0c;使用同一份构建配置可以在不同的环境中使用 简化配置&#xff1a;通过CMakeLists.txt文件&#xff0c;用户可以定义项目结构、依赖项、编译选项等&#xff0c;无需手动编写复杂的构建脚本…...

从实验室到产业:IndexTTS 在六大核心场景的落地实践

一、内容创作&#xff1a;重构数字内容生产范式 在短视频创作领域&#xff0c;IndexTTS 的语音克隆技术彻底改变了配音流程。B 站 UP 主通过 5 秒参考音频即可克隆出郭老师音色&#xff0c;生成的 “各位吴彦祖们大家好” 语音相似度达 97%&#xff0c;单条视频播放量突破百万…...

C++ 类基础:封装、继承、多态与多线程模板实现

前言 C 是一门强大的面向对象编程语言&#xff0c;而类&#xff08;Class&#xff09;作为其核心特性之一&#xff0c;是理解和使用 C 的关键。本文将深入探讨 C 类的基本特性&#xff0c;包括封装、继承和多态&#xff0c;同时讨论类中的权限控制&#xff0c;并展示如何使用类…...

C++中vector类型的介绍和使用

文章目录 一、vector 类型的简介1.1 基本介绍1.2 常见用法示例1.3 常见成员函数简表 二、vector 数据的插入2.1 push_back() —— 在尾部插入一个元素2.2 emplace_back() —— 在尾部“就地”构造对象2.3 insert() —— 在任意位置插入一个或多个元素2.4 emplace() —— 在任意…...