当前位置: 首页 > 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包…...

KubeSphere 容器平台高可用:环境搭建与可视化操作指南

Linux_k8s篇 欢迎来到Linux的世界&#xff0c;看笔记好好学多敲多打&#xff0c;每个人都是大神&#xff01; 题目&#xff1a;KubeSphere 容器平台高可用&#xff1a;环境搭建与可视化操作指南 版本号: 1.0,0 作者: 老王要学习 日期: 2025.06.05 适用环境: Ubuntu22 文档说…...

三维GIS开发cesium智慧地铁教程(5)Cesium相机控制

一、环境搭建 <script src"../cesium1.99/Build/Cesium/Cesium.js"></script> <link rel"stylesheet" href"../cesium1.99/Build/Cesium/Widgets/widgets.css"> 关键配置点&#xff1a; 路径验证&#xff1a;确保相对路径.…...

Debian系统简介

目录 Debian系统介绍 Debian版本介绍 Debian软件源介绍 软件包管理工具dpkg dpkg核心指令详解 安装软件包 卸载软件包 查询软件包状态 验证软件包完整性 手动处理依赖关系 dpkg vs apt Debian系统介绍 Debian 和 Ubuntu 都是基于 Debian内核 的 Linux 发行版&#xff…...

剑指offer20_链表中环的入口节点

链表中环的入口节点 给定一个链表&#xff0c;若其中包含环&#xff0c;则输出环的入口节点。 若其中不包含环&#xff0c;则输出null。 数据范围 节点 val 值取值范围 [ 1 , 1000 ] [1,1000] [1,1000]。 节点 val 值各不相同。 链表长度 [ 0 , 500 ] [0,500] [0,500]。 …...

Frozen-Flask :将 Flask 应用“冻结”为静态文件

Frozen-Flask 是一个用于将 Flask 应用“冻结”为静态文件的 Python 扩展。它的核心用途是&#xff1a;将一个 Flask Web 应用生成成纯静态 HTML 文件&#xff0c;从而可以部署到静态网站托管服务上&#xff0c;如 GitHub Pages、Netlify 或任何支持静态文件的网站服务器。 &am…...

镜像里切换为普通用户

如果你登录远程虚拟机默认就是 root 用户&#xff0c;但你不希望用 root 权限运行 ns-3&#xff08;这是对的&#xff0c;ns3 工具会拒绝 root&#xff09;&#xff0c;你可以按以下方法创建一个 非 root 用户账号 并切换到它运行 ns-3。 一次性解决方案&#xff1a;创建非 roo…...

.Net Framework 4/C# 关键字(非常用,持续更新...)

一、is 关键字 is 关键字用于检查对象是否于给定类型兼容,如果兼容将返回 true,如果不兼容则返回 false,在进行类型转换前,可以先使用 is 关键字判断对象是否与指定类型兼容,如果兼容才进行转换,这样的转换是安全的。 例如有:首先创建一个字符串对象,然后将字符串对象隐…...

JavaScript基础-API 和 Web API

在学习JavaScript的过程中&#xff0c;理解API&#xff08;应用程序接口&#xff09;和Web API的概念及其应用是非常重要的。这些工具极大地扩展了JavaScript的功能&#xff0c;使得开发者能够创建出功能丰富、交互性强的Web应用程序。本文将深入探讨JavaScript中的API与Web AP…...

在Mathematica中实现Newton-Raphson迭代的收敛时间算法(一般三次多项式)

考察一般的三次多项式&#xff0c;以r为参数&#xff1a; p[z_, r_] : z^3 (r - 1) z - r; roots[r_] : z /. Solve[p[z, r] 0, z]&#xff1b; 此多项式的根为&#xff1a; 尽管看起来这个多项式是特殊的&#xff0c;其实一般的三次多项式都是可以通过线性变换化为这个形式…...

人工智能--安全大模型训练计划:基于Fine-tuning + LLM Agent

安全大模型训练计划&#xff1a;基于Fine-tuning LLM Agent 1. 构建高质量安全数据集 目标&#xff1a;为安全大模型创建高质量、去偏、符合伦理的训练数据集&#xff0c;涵盖安全相关任务&#xff08;如有害内容检测、隐私保护、道德推理等&#xff09;。 1.1 数据收集 描…...