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

R语言:使用 tidyr 进行数据整理

在数据分析和处理的过程中,数据整理是一项至关重要的任务。R 语言中的 tidyr 包提供了一组强大的函数,用于将数据转换为更易于分析的格式。tidyr 包的设计准则如下:

  1. 每个变量都有自己的列。
  2. 每个观察值都有自己的行。
  3. 每个值都有自己的单元格。

本文将详细介绍 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_namelast_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_namelast_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 进行数据整理

在数据分析和处理的过程中&#xff0c;数据整理是一项至关重要的任务。R 语言中的 tidyr 包提供了一组强大的函数&#xff0c;用于将数据转换为更易于分析的格式。tidyr 包的设计准则如下&#xff1a; 每个变量都有自己的列。每个观察值都有自己的行。每个值都有自己的单元格。…...

帝国CMS火车头采集发布模块详细使用方法

火车头采集文章数据发布到帝国CMS系统操作步骤如下&#xff1a; 1. 下载火车头采集帝国cms发布模块&#xff1a;帝国cms发布模块接口下载地址&#xff08;免登录&#xff09;-CSDN &#xff1b; 2. 帝国cms发布模块导入火车头采集软件&#xff1b; 3. 填写帝国cms数据库中相…...

Unity 数据存储

在Unity中&#xff0c;资源的存储是非常重要的&#xff0c;所以了解资源的存储方式是有必要的&#xff0c;接下来说明一个重要的部分。 1.Unity存储 Unity为我们提供了自带的永久存储方式&#xff0c;PlayerPrefs&#xff0c;使用方法可以参考我这篇文章..点击导航 当然&…...

Doris 少数SQL在Datagrip无法执行,而在DorisUI或程序调用可以执行的问题

问题&#xff1a;Doris 少数SQL在Datagrip无法执行&#xff0c;而在DorisUI或程序调用可以执行 解决&#xff1a;Datagrip 执行SQL切分异常&#xff0c;设置默认执行语句方式&#xff0c;将分句改为整句执行 但是 支持多SQL批量分开执行更好用...

若依RuoYi-Vue分离版—配置多数据源

若依RuoYi-Vue分离版—配置多数据源 一、修改application-druid.yml二、修改pom文件&#xff0c;引入依赖第一种&#xff1a;下载jar包到本地&#xff0c;然后引入&#xff08;我这边用的是这种&#xff09;本地引入的&#xff0c;打包时需要加上配置 第二种&#xff1a;从远程…...

电子科技大学卓中卓二轮——分析笔记

1. 子系统的关键工作原理 在Linux子系统&#xff08;Subsystem for Linux, 简称WSL&#xff09;中&#xff0c;API&#xff08;应用程序编程接口&#xff09;的转换和映射是一个关键过程&#xff0c;目的是让Windows应用程序能够与Linux环境中的系统调用无缝交互。WSL使用了名…...

代码随想录算法训练营第三十五天|1005.K次取反后最大化的数组和 134. 加油站 135. 分发糖果

LeetCode 1005.K次取反后最大化的数组和 题目链接&#xff1a;1005.K次取反后最大化的数组和 踩坑&#xff1a;没有 思路&#xff1a;数组里有正有负&#xff0c;肯定先对负数进行取反&#xff0c;且从小开始。如果所有负数都为正后还可以取反&#xff0c;则如果此时次数为奇…...

鸿蒙开发HarmonyOS Next 网络框架retrofit 封装 viemodel使用

新手刚开始学习harmonyos开发&#xff0c;之前搞安卓开发习惯使用retrofit,结果在三方库中还真搜到了&#xff0c;然后就模拟学习一下。有不对的地方请指点一下。新手新手 oh-package.json5 引入库 retofit 需要使用2.0.1-rc.0 以上版本&#xff0c;修复了retrofit发送网络请…...

什么是SpringMVC

StringMvc简介 Spring web mvc和Struts2都属于表现层的框架,它是Spring框架的一部分,我们可以从Spring的整体结构中看得出来&#xff1a;...

【PowerDesigner】PDM生成建表脚本

目录 &#x1f30a;1. PowerDesigner简介 &#x1f30d;1.1 常用模型文件 &#x1f30d;1.2 PowerDesigner使用环境 &#x1f30a;2. PDM生成建表脚本 &#x1f30a;3. 研究心得 &#x1f30a;1. PowerDesigner简介 &#x1f30d;1.1 常用模型文件 主要使用PowerDesigne…...

React实现在线预览word报告/本地选择报告预览

标题使用的核心技术点是docx-preview&#xff0c;读取到文件的File对象&#xff0c;用File去做文件展示&#xff0c;这里是才用将文件转base64字符串存储到localStorage中 在线预览word报告且包含word样式 下载需要使用的min.js文件进项目的public目录中&#xff08;上zip已包…...

计算机哈佛架构、冯·诺依曼架构对比

哈佛架构和冯诺依曼架构是两种不同的计算机系统架构&#xff0c;它们在存储器组织方式上有着显著的区别。下面是它们的原理、优缺点的对比以及一些常见的 MCU 采用的架构&#xff1a; 哈佛架构&#xff1a; 原理&#xff1a;哈佛架构将指令存储器&#xff08;程序存储器&#x…...

单片机串口发送为空中断和发送完成中断有什么区别?

单片机串口发送的空中断和发送完成中断在触发条件和功能上存在明显的区别。以下是关于这两种中断的详细解释&#xff1a; 【发送为空】中断&#xff08;Transmit Data Register Empty Interrupt&#xff09;&#xff1a; 触发条件&#xff1a;当发送数据寄存器&#xff08;TDR…...

css特效:对多个tag标签实现模拟地球仪特效

要实现对多个<a>标签&#xff08;比如链接&#xff09;的模拟地球仪特效和鼠标跟随特效&#xff0c;你可以使用CSS和一点点JavaScript来完成。下面是一个基本的示例代码&#xff1a;HTML代码&#xff1a; <!DOCTYPE html> <html lang"en"> <h…...

【2024Python教程】Python文件打包成exe,如果有图片怎么打包?有手就会的超简单教程

目录 pyinstaller模块打包exe&#xff08;无图片或其他文件打包版&#xff09; 第一步 安装pyinstaller模块&#xff1a; 第二步 找到需要打包的主程序文件夹 第三步 打包exe文件 第四步 确认exe文件是否可以打开 pyinstaller模块打包exe&#xff08;有图片打包版--方法一…...

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.经过多轮迭代&#xff0c;最终…...

这些Linux知识可不是靠背就会的!

在信息技术日新月异的今天&#xff0c;Linux以其开源、稳定、高效的特性&#xff0c;逐渐成为了众多专业人士的首选操作系统。然而&#xff0c;关于Linux知识的学习&#xff0c;却常常陷入一个误区——许多人认为&#xff0c;掌握Linux就是死记硬背各种命令和参数。这种观念&am…...

openlayers 绘图功能,绘制多边形,draw组件的使用,一个简单的需求引发的思考(一)

1 需求 使用openlayers绘图功能绘制多边形 2 分析 主要是openlayers中draw功能的使用&#xff0c;感觉比较简单&#xff0c;祖传CV大法搞起来 3 实现 为了方便&#xff0c;就不加载底图了&#xff0c;直接使用绘制功能 2.1 简单实现 <template><div id"ma…...

【Flutter】 TextField限制长度时, 第三方手写输入法、ios原始拼音输入法输入被吞问题

问题描述 TextField限制长度时&#xff0c; 当你的输入字符长度已经到了最大值-1时&#xff0c;使用第三方手写输入法或者ios原生拼音输入法输入liang&#xff08;什么拼音都行&#xff0c;这里只是举例&#xff09;&#xff0c;输到i那么li都会消失。 原因分析 这是因为第三…...

快递一键查询,只需快递单号,轻松掌握全程物流信息,让您的包裹追踪无忧!

在快节奏的现代生活中&#xff0c;快递已经成为我们生活中不可或缺的一部分。无论是网购的宝贝、亲朋好友寄来的礼物&#xff0c;还是工作中的紧急文件&#xff0c;快递都承载着我们的期待和需要。然而&#xff0c;面对众多的快递公司和复杂的查询流程&#xff0c;如何快速、准…...

挑战杯推荐项目

“人工智能”创意赛 - 智能艺术创作助手&#xff1a;借助大模型技术&#xff0c;开发能根据用户输入的主题、风格等要求&#xff0c;生成绘画、音乐、文学作品等多种形式艺术创作灵感或初稿的应用&#xff0c;帮助艺术家和创意爱好者激发创意、提高创作效率。 ​ - 个性化梦境…...

【网络】每天掌握一个Linux命令 - iftop

在Linux系统中&#xff0c;iftop是网络管理的得力助手&#xff0c;能实时监控网络流量、连接情况等&#xff0c;帮助排查网络异常。接下来从多方面详细介绍它。 目录 【网络】每天掌握一个Linux命令 - iftop工具概述安装方式核心功能基础用法进阶操作实战案例面试题场景生产场景…...

Ascend NPU上适配Step-Audio模型

1 概述 1.1 简述 Step-Audio 是业界首个集语音理解与生成控制一体化的产品级开源实时语音对话系统&#xff0c;支持多语言对话&#xff08;如 中文&#xff0c;英文&#xff0c;日语&#xff09;&#xff0c;语音情感&#xff08;如 开心&#xff0c;悲伤&#xff09;&#x…...

稳定币的深度剖析与展望

一、引言 在当今数字化浪潮席卷全球的时代&#xff0c;加密货币作为一种新兴的金融现象&#xff0c;正以前所未有的速度改变着我们对传统货币和金融体系的认知。然而&#xff0c;加密货币市场的高度波动性却成为了其广泛应用和普及的一大障碍。在这样的背景下&#xff0c;稳定…...

【VLNs篇】07:NavRL—在动态环境中学习安全飞行

项目内容论文标题NavRL: 在动态环境中学习安全飞行 (NavRL: Learning Safe Flight in Dynamic Environments)核心问题解决无人机在包含静态和动态障碍物的复杂环境中进行安全、高效自主导航的挑战&#xff0c;克服传统方法和现有强化学习方法的局限性。核心算法基于近端策略优化…...

LINUX 69 FTP 客服管理系统 man 5 /etc/vsftpd/vsftpd.conf

FTP 客服管理系统 实现kefu123登录&#xff0c;不允许匿名访问&#xff0c;kefu只能访问/data/kefu目录&#xff0c;不能查看其他目录 创建账号密码 useradd kefu echo 123|passwd -stdin kefu [rootcode caozx26420]# echo 123|passwd --stdin kefu 更改用户 kefu 的密码…...

A2A JS SDK 完整教程:快速入门指南

目录 什么是 A2A JS SDK?A2A JS 安装与设置A2A JS 核心概念创建你的第一个 A2A JS 代理A2A JS 服务端开发A2A JS 客户端使用A2A JS 高级特性A2A JS 最佳实践A2A JS 故障排除 什么是 A2A JS SDK? A2A JS SDK 是一个专为 JavaScript/TypeScript 开发者设计的强大库&#xff…...

【从零学习JVM|第三篇】类的生命周期(高频面试题)

前言&#xff1a; 在Java编程中&#xff0c;类的生命周期是指类从被加载到内存中开始&#xff0c;到被卸载出内存为止的整个过程。了解类的生命周期对于理解Java程序的运行机制以及性能优化非常重要。本文会深入探寻类的生命周期&#xff0c;让读者对此有深刻印象。 目录 ​…...

MySQL 8.0 事务全面讲解

以下是一个结合两次回答的 MySQL 8.0 事务全面讲解&#xff0c;涵盖了事务的核心概念、操作示例、失败回滚、隔离级别、事务性 DDL 和 XA 事务等内容&#xff0c;并修正了查看隔离级别的命令。 MySQL 8.0 事务全面讲解 一、事务的核心概念&#xff08;ACID&#xff09; 事务是…...

【LeetCode】3309. 连接二进制表示可形成的最大数值(递归|回溯|位运算)

LeetCode 3309. 连接二进制表示可形成的最大数值&#xff08;中等&#xff09; 题目描述解题思路Java代码 题目描述 题目链接&#xff1a;LeetCode 3309. 连接二进制表示可形成的最大数值&#xff08;中等&#xff09; 给你一个长度为 3 的整数数组 nums。 现以某种顺序 连接…...