R语言:使用 tidyr 进行数据整理
在数据分析和处理的过程中,数据整理是一项至关重要的任务。R 语言中的 tidyr 包提供了一组强大的函数,用于将数据转换为更易于分析的格式。tidyr 包的设计准则如下:
- 每个变量都有自己的列。
- 每个观察值都有自己的行。
- 每个值都有自己的单元格。
本文将详细介绍 tidyr 包中的主要函数及其用法,并提供相关的示例代码,帮助读者更好地理解和应用这些函数。
pivot_longer() – 宽表转长表
pivot_longer() 函数用于将宽格式的数据转换为长格式。在宽格式中,每个变量有多个列,而在长格式中,每个变量只有一列。这个转换有助于更好地进行数据分析和可视化。
语法
pivot_longer(data, cols, names_to = "name", values_to = "value")
示例
假设我们有一个包含学生考试成绩的宽格式数据框:
library(tidyr)
library(dplyr)df <- tibble(student = c("Alice", "Bob", "Charlie"),math = c(85, 90, 78),science = c(92, 85, 88)
)
我们可以使用 pivot_longer() 将其转换为长格式:
df_long <- df %>%pivot_longer(cols = c(math, science), names_to = "subject", values_to = "score")print(df_long)
输出结果:
# A tibble: 6 × 3student subject score<chr> <chr> <dbl>
1 Alice math 85
2 Alice science 92
3 Bob math 90
4 Bob science 85
5 Charlie math 78
6 Charlie science 88
pivot_wider() – 长表转宽表
pivot_wider() 函数用于将长格式的数据转换为宽格式。这在需要按变量进行分组或聚合时非常有用。
语法
pivot_wider(data, names_from, values_from)
示例
我们可以使用上面生成的长格式数据 df_long 将其转换回宽格式:
df_wide <- df_long %>%pivot_wider(names_from = subject, values_from = score)print(df_wide)
输出结果:
# A tibble: 3 × 3student math science<chr> <dbl> <dbl>
1 Alice 85 92
2 Bob 90 85
3 Charlie 78 88
separate() – 分列
separate() 函数用于将一列数据拆分为多列。通常用于含有分隔符的字符串列。
语法
separate(data, col, into, sep = " ")
示例
假设我们有一个包含完整姓名的数据框:
df_names <- tibble(full_name = c("Alice Johnson", "Bob Smith", "Charlie Brown")
)
我们可以使用 separate() 将 full_name 列拆分为 first_name 和 last_name:
df_separated <- df_names %>%separate(full_name, into = c("first_name", "last_name"), sep = " ")print(df_separated)
输出结果:
# A tibble: 3 × 2first_name last_name<chr> <chr>
1 Alice Johnson
2 Bob Smith
3 Charlie Brown
unite() – 合列
unite() 函数用于将多列数据合并为一列,通常用于需要生成一个复合键或组合字符串。
语法
unite(data, col, ..., sep = "_")
示例
我们可以使用 unite() 将 first_name 和 last_name 列合并为 full_name:
df_united <- df_separated %>%unite(full_name, first_name, last_name, sep = " ")print(df_united)
输出结果:
# A tibble: 3 × 1full_name<chr>
1 Alice Johnson
2 Bob Smith
3 Charlie Brown
其他辅助函数
complete()
complete() 函数用于填补数据框中缺失的行,确保所有组合的变量都有对应的观察值。
示例
df_incomplete <- tibble(student = c("Alice", "Bob", "Alice"),subject = c("math", "math", "science"),score = c(85, 90, 92)
)df_complete <- df_incomplete %>%complete(student, subject)print(df_complete)
输出结果:
# A tibble: 4 × 3student subject score<chr> <chr> <dbl>
1 Alice math 85
2 Alice science 92
3 Bob math 90
4 Bob science NA
fill()
fill() 函数用于填充缺失值,通常用于时间序列数据或分组数据。
示例
df_missing <- tibble(month = c(1, 2, 3, 4, 5),value = c(10, NA, NA, 20, NA)
)df_filled <- df_missing %>%fill(value, .direction = "down")print(df_filled)
输出结果:
# A tibble: 5 × 2month value<dbl> <dbl>
1 1 10
2 2 10
3 3 10
4 4 20
5 5 20
总结
tidyr 包提供了一套简洁而强大的工具,帮助我们将数据整理为分析友好的格式。通过掌握 pivot_longer()、pivot_wider()、separate() 和 unite() 等函数,以及 complete() 和 fill() 等辅助函数,我们可以有效地处理和转换数据。希望本文能帮助读者更好地理解和应用这些函数,提高数据处理的效率。
相关文章:
R语言:使用 tidyr 进行数据整理
在数据分析和处理的过程中,数据整理是一项至关重要的任务。R 语言中的 tidyr 包提供了一组强大的函数,用于将数据转换为更易于分析的格式。tidyr 包的设计准则如下: 每个变量都有自己的列。每个观察值都有自己的行。每个值都有自己的单元格。…...
帝国CMS火车头采集发布模块详细使用方法
火车头采集文章数据发布到帝国CMS系统操作步骤如下: 1. 下载火车头采集帝国cms发布模块:帝国cms发布模块接口下载地址(免登录)-CSDN ; 2. 帝国cms发布模块导入火车头采集软件; 3. 填写帝国cms数据库中相…...
Unity 数据存储
在Unity中,资源的存储是非常重要的,所以了解资源的存储方式是有必要的,接下来说明一个重要的部分。 1.Unity存储 Unity为我们提供了自带的永久存储方式,PlayerPrefs,使用方法可以参考我这篇文章..点击导航 当然&…...
Doris 少数SQL在Datagrip无法执行,而在DorisUI或程序调用可以执行的问题
问题:Doris 少数SQL在Datagrip无法执行,而在DorisUI或程序调用可以执行 解决:Datagrip 执行SQL切分异常,设置默认执行语句方式,将分句改为整句执行 但是 支持多SQL批量分开执行更好用...
若依RuoYi-Vue分离版—配置多数据源
若依RuoYi-Vue分离版—配置多数据源 一、修改application-druid.yml二、修改pom文件,引入依赖第一种:下载jar包到本地,然后引入(我这边用的是这种)本地引入的,打包时需要加上配置 第二种:从远程…...
电子科技大学卓中卓二轮——分析笔记
1. 子系统的关键工作原理 在Linux子系统(Subsystem for Linux, 简称WSL)中,API(应用程序编程接口)的转换和映射是一个关键过程,目的是让Windows应用程序能够与Linux环境中的系统调用无缝交互。WSL使用了名…...
代码随想录算法训练营第三十五天|1005.K次取反后最大化的数组和 134. 加油站 135. 分发糖果
LeetCode 1005.K次取反后最大化的数组和 题目链接:1005.K次取反后最大化的数组和 踩坑:没有 思路:数组里有正有负,肯定先对负数进行取反,且从小开始。如果所有负数都为正后还可以取反,则如果此时次数为奇…...
鸿蒙开发HarmonyOS Next 网络框架retrofit 封装 viemodel使用
新手刚开始学习harmonyos开发,之前搞安卓开发习惯使用retrofit,结果在三方库中还真搜到了,然后就模拟学习一下。有不对的地方请指点一下。新手新手 oh-package.json5 引入库 retofit 需要使用2.0.1-rc.0 以上版本,修复了retrofit发送网络请…...
什么是SpringMVC
StringMvc简介 Spring web mvc和Struts2都属于表现层的框架,它是Spring框架的一部分,我们可以从Spring的整体结构中看得出来:...
【PowerDesigner】PDM生成建表脚本
目录 🌊1. PowerDesigner简介 🌍1.1 常用模型文件 🌍1.2 PowerDesigner使用环境 🌊2. PDM生成建表脚本 🌊3. 研究心得 🌊1. PowerDesigner简介 🌍1.1 常用模型文件 主要使用PowerDesigne…...
React实现在线预览word报告/本地选择报告预览
标题使用的核心技术点是docx-preview,读取到文件的File对象,用File去做文件展示,这里是才用将文件转base64字符串存储到localStorage中 在线预览word报告且包含word样式 下载需要使用的min.js文件进项目的public目录中(上zip已包…...
计算机哈佛架构、冯·诺依曼架构对比
哈佛架构和冯诺依曼架构是两种不同的计算机系统架构,它们在存储器组织方式上有着显著的区别。下面是它们的原理、优缺点的对比以及一些常见的 MCU 采用的架构: 哈佛架构: 原理:哈佛架构将指令存储器(程序存储器&#x…...
单片机串口发送为空中断和发送完成中断有什么区别?
单片机串口发送的空中断和发送完成中断在触发条件和功能上存在明显的区别。以下是关于这两种中断的详细解释: 【发送为空】中断(Transmit Data Register Empty Interrupt): 触发条件:当发送数据寄存器(TDR…...
css特效:对多个tag标签实现模拟地球仪特效
要实现对多个<a>标签(比如链接)的模拟地球仪特效和鼠标跟随特效,你可以使用CSS和一点点JavaScript来完成。下面是一个基本的示例代码:HTML代码: <!DOCTYPE html> <html lang"en"> <h…...
【2024Python教程】Python文件打包成exe,如果有图片怎么打包?有手就会的超简单教程
目录 pyinstaller模块打包exe(无图片或其他文件打包版) 第一步 安装pyinstaller模块: 第二步 找到需要打包的主程序文件夹 第三步 打包exe文件 第四步 确认exe文件是否可以打开 pyinstaller模块打包exe(有图片打包版--方法一…...
mac环境基于llama3和metaGPT自动开发2048游戏
1.准备虚拟环境 conda create -n metagpt python3.9 && conda activate metagpt 2.安装metagpt pip install --upgrade metagpt 3.初始化配置文件 metagpt --init-config 4. 安装llama3 5. 修改配置文件 6.让metegpt自动开发2048游戏 7.经过多轮迭代,最终…...
这些Linux知识可不是靠背就会的!
在信息技术日新月异的今天,Linux以其开源、稳定、高效的特性,逐渐成为了众多专业人士的首选操作系统。然而,关于Linux知识的学习,却常常陷入一个误区——许多人认为,掌握Linux就是死记硬背各种命令和参数。这种观念&am…...
openlayers 绘图功能,绘制多边形,draw组件的使用,一个简单的需求引发的思考(一)
1 需求 使用openlayers绘图功能绘制多边形 2 分析 主要是openlayers中draw功能的使用,感觉比较简单,祖传CV大法搞起来 3 实现 为了方便,就不加载底图了,直接使用绘制功能 2.1 简单实现 <template><div id"ma…...
【Flutter】 TextField限制长度时, 第三方手写输入法、ios原始拼音输入法输入被吞问题
问题描述 TextField限制长度时, 当你的输入字符长度已经到了最大值-1时,使用第三方手写输入法或者ios原生拼音输入法输入liang(什么拼音都行,这里只是举例),输到i那么li都会消失。 原因分析 这是因为第三…...
快递一键查询,只需快递单号,轻松掌握全程物流信息,让您的包裹追踪无忧!
在快节奏的现代生活中,快递已经成为我们生活中不可或缺的一部分。无论是网购的宝贝、亲朋好友寄来的礼物,还是工作中的紧急文件,快递都承载着我们的期待和需要。然而,面对众多的快递公司和复杂的查询流程,如何快速、准…...
React Native在HarmonyOS 5.0阅读类应用开发中的实践
一、技术选型背景 随着HarmonyOS 5.0对Web兼容层的增强,React Native作为跨平台框架可通过重新编译ArkTS组件实现85%以上的代码复用率。阅读类应用具有UI复杂度低、数据流清晰的特点。 二、核心实现方案 1. 环境配置 (1)使用React Native…...
页面渲染流程与性能优化
页面渲染流程与性能优化详解(完整版) 一、现代浏览器渲染流程(详细说明) 1. 构建DOM树 浏览器接收到HTML文档后,会逐步解析并构建DOM(Document Object Model)树。具体过程如下: (…...
vue3 定时器-定义全局方法 vue+ts
1.创建ts文件 路径:src/utils/timer.ts 完整代码: import { onUnmounted } from vuetype TimerCallback (...args: any[]) > voidexport function useGlobalTimer() {const timers: Map<number, NodeJS.Timeout> new Map()// 创建定时器con…...
pikachu靶场通关笔记22-1 SQL注入05-1-insert注入(报错法)
目录 一、SQL注入 二、insert注入 三、报错型注入 四、updatexml函数 五、源码审计 六、insert渗透实战 1、渗透准备 2、获取数据库名database 3、获取表名table 4、获取列名column 5、获取字段 本系列为通过《pikachu靶场通关笔记》的SQL注入关卡(共10关࿰…...
代码随想录刷题day30
1、零钱兑换II 给你一个整数数组 coins 表示不同面额的硬币,另给一个整数 amount 表示总金额。 请你计算并返回可以凑成总金额的硬币组合数。如果任何硬币组合都无法凑出总金额,返回 0 。 假设每一种面额的硬币有无限个。 题目数据保证结果符合 32 位带…...
并发编程 - go版
1.并发编程基础概念 进程和线程 A. 进程是程序在操作系统中的一次执行过程,系统进行资源分配和调度的一个独立单位。B. 线程是进程的一个执行实体,是CPU调度和分派的基本单位,它是比进程更小的能独立运行的基本单位。C.一个进程可以创建和撤销多个线程;同一个进程中…...
【Android】Android 开发 ADB 常用指令
查看当前连接的设备 adb devices 连接设备 adb connect 设备IP 断开已连接的设备 adb disconnect 设备IP 安装应用 adb install 安装包的路径 卸载应用 adb uninstall 应用包名 查看已安装的应用包名 adb shell pm list packages 查看已安装的第三方应用包名 adb shell pm list…...
Web后端基础(基础知识)
BS架构:Browser/Server,浏览器/服务器架构模式。客户端只需要浏览器,应用程序的逻辑和数据都存储在服务端。 优点:维护方便缺点:体验一般 CS架构:Client/Server,客户端/服务器架构模式。需要单独…...
抽象类和接口(全)
一、抽象类 1.概念:如果⼀个类中没有包含⾜够的信息来描绘⼀个具体的对象,这样的类就是抽象类。 像是没有实际⼯作的⽅法,我们可以把它设计成⼀个抽象⽅法,包含抽象⽅法的类我们称为抽象类。 2.语法 在Java中,⼀个类如果被 abs…...
Python竞赛环境搭建全攻略
Python环境搭建竞赛技术文章大纲 竞赛背景与意义 竞赛的目的与价值Python在竞赛中的应用场景环境搭建对竞赛效率的影响 竞赛环境需求分析 常见竞赛类型(算法、数据分析、机器学习等)不同竞赛对Python版本及库的要求硬件与操作系统的兼容性问题 Pyth…...
