当前位置: 首页 > 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() 等辅助函数,我们可以有效地处理和转换数据。希望本文能帮助读者更好地理解和应用这些函数,提高数据处理的效率。

http://www.lryc.cn/news/369595.html

相关文章:

  • 帝国CMS火车头采集发布模块详细使用方法
  • Unity 数据存储
  • Doris 少数SQL在Datagrip无法执行,而在DorisUI或程序调用可以执行的问题
  • 若依RuoYi-Vue分离版—配置多数据源
  • 电子科技大学卓中卓二轮——分析笔记
  • 代码随想录算法训练营第三十五天|1005.K次取反后最大化的数组和 134. 加油站 135. 分发糖果
  • 鸿蒙开发HarmonyOS Next 网络框架retrofit 封装 viemodel使用
  • 什么是SpringMVC
  • 【PowerDesigner】PDM生成建表脚本
  • React实现在线预览word报告/本地选择报告预览
  • 计算机哈佛架构、冯·诺依曼架构对比
  • 单片机串口发送为空中断和发送完成中断有什么区别?
  • css特效:对多个tag标签实现模拟地球仪特效
  • 【2024Python教程】Python文件打包成exe,如果有图片怎么打包?有手就会的超简单教程
  • mac环境基于llama3和metaGPT自动开发2048游戏
  • 这些Linux知识可不是靠背就会的!
  • openlayers 绘图功能,绘制多边形,draw组件的使用,一个简单的需求引发的思考(一)
  • 【Flutter】 TextField限制长度时, 第三方手写输入法、ios原始拼音输入法输入被吞问题
  • 快递一键查询,只需快递单号,轻松掌握全程物流信息,让您的包裹追踪无忧!
  • 【Java探索之旅】继承结构 继承和组合 protected final
  • Ubuntu20.04-SLAM软件安装
  • OSI七层网络参考模型
  • RAG与知识库搭建
  • MySQL提权之UDF提权
  • 【设计模式】结构型设计模式之 组合模式
  • 我给KTV服务生讲解防抖,他竟然听懂了
  • 抽象java入门1.3.1
  • 使用Rufus工具制作Ubuntu To Go——很详细
  • Android Jetpack Compose 实现一个电视剧选集界面
  • C++多线程并发