当前位置: 首页 > 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;如何快速、准…...

从深圳崛起的“机器之眼”:赴港乐动机器人的万亿赛道赶考路

进入2025年以来&#xff0c;尽管围绕人形机器人、具身智能等机器人赛道的质疑声不断&#xff0c;但全球市场热度依然高涨&#xff0c;入局者持续增加。 以国内市场为例&#xff0c;天眼查专业版数据显示&#xff0c;截至5月底&#xff0c;我国现存在业、存续状态的机器人相关企…...

全球首个30米分辨率湿地数据集(2000—2022)

数据简介 今天我们分享的数据是全球30米分辨率湿地数据集&#xff0c;包含8种湿地亚类&#xff0c;该数据以0.5X0.5的瓦片存储&#xff0c;我们整理了所有属于中国的瓦片名称与其对应省份&#xff0c;方便大家研究使用。 该数据集作为全球首个30米分辨率、覆盖2000–2022年时间…...

2025盘古石杯决赛【手机取证】

前言 第三届盘古石杯国际电子数据取证大赛决赛 最后一题没有解出来&#xff0c;实在找不到&#xff0c;希望有大佬教一下我。 还有就会议时间&#xff0c;我感觉不是图片时间&#xff0c;因为在电脑看到是其他时间用老会议系统开的会。 手机取证 1、分析鸿蒙手机检材&#x…...

OPenCV CUDA模块图像处理-----对图像执行 均值漂移滤波(Mean Shift Filtering)函数meanShiftFiltering()

操作系统&#xff1a;ubuntu22.04 OpenCV版本&#xff1a;OpenCV4.9 IDE:Visual Studio Code 编程语言&#xff1a;C11 算法描述 在 GPU 上对图像执行 均值漂移滤波&#xff08;Mean Shift Filtering&#xff09;&#xff0c;用于图像分割或平滑处理。 该函数将输入图像中的…...

零基础在实践中学习网络安全-皮卡丘靶场(第九期-Unsafe Fileupload模块)(yakit方式)

本期内容并不是很难&#xff0c;相信大家会学的很愉快&#xff0c;当然对于有后端基础的朋友来说&#xff0c;本期内容更加容易了解&#xff0c;当然没有基础的也别担心&#xff0c;本期内容会详细解释有关内容 本期用到的软件&#xff1a;yakit&#xff08;因为经过之前好多期…...

Angular微前端架构:Module Federation + ngx-build-plus (Webpack)

以下是一个完整的 Angular 微前端示例&#xff0c;其中使用的是 Module Federation 和 npx-build-plus 实现了主应用&#xff08;Shell&#xff09;与子应用&#xff08;Remote&#xff09;的集成。 &#x1f6e0;️ 项目结构 angular-mf/ ├── shell-app/ # 主应用&…...

Yolov8 目标检测蒸馏学习记录

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

【SSH疑难排查】轻松解决新版OpenSSH连接旧服务器的“no matching...“系列算法协商失败问题

【SSH疑难排查】轻松解决新版OpenSSH连接旧服务器的"no matching..."系列算法协商失败问题 摘要&#xff1a; 近期&#xff0c;在使用较新版本的OpenSSH客户端连接老旧SSH服务器时&#xff0c;会遇到 "no matching key exchange method found"​, "n…...

Go语言多线程问题

打印零与奇偶数&#xff08;leetcode 1116&#xff09; 方法1&#xff1a;使用互斥锁和条件变量 package mainimport ("fmt""sync" )type ZeroEvenOdd struct {n intzeroMutex sync.MutexevenMutex sync.MutexoddMutex sync.Mutexcurrent int…...

省略号和可变参数模板

本文主要介绍如何展开可变参数的参数包 1.C语言的va_list展开可变参数 #include <iostream> #include <cstdarg>void printNumbers(int count, ...) {// 声明va_list类型的变量va_list args;// 使用va_start将可变参数写入变量argsva_start(args, count);for (in…...