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 × 3
  student 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 × 3
  student 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 × 2
  first_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 × 1
  full_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 × 3
  student 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 × 2
  month 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() 等辅助函数,我们可以有效地处理和转换数据。希望本文能帮助读者更好地理解和应用这些函数,提高数据处理的效率。

相关推荐

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

    2024-06-11 07:30:04       15 阅读
  2. R语言使用 readr 包进行数据导入和解析

    2024-06-11 07:30:04       11 阅读
  3. R语言 |一些常用的数据整理的技巧(二)

    2024-06-11 07:30:04       13 阅读
  4. R语言 数据整理与清洗(第一篇)

    2024-06-11 07:30:04       13 阅读
  5. R语言 数据整理与清洗(Factor篇)

    2024-06-11 07:30:04       10 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-06-11 07:30:04       18 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-06-11 07:30:04       19 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-06-11 07:30:04       18 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-06-11 07:30:04       20 阅读

热门阅读

  1. C#——Math 数学函数详情

    2024-06-11 07:30:04       11 阅读
  2. 【Spring Boot】Spring Boot 的世界之旅1

    2024-06-11 07:30:04       9 阅读
  3. Toast.makeText() 使用方法

    2024-06-11 07:30:04       12 阅读
  4. 设计模式之组合模式

    2024-06-11 07:30:04       10 阅读
  5. 速盾:图片cdn加速 免费

    2024-06-11 07:30:04       8 阅读
  6. react+wijmo所遇问题

    2024-06-11 07:30:04       11 阅读
  7. 电商项目-day01

    2024-06-11 07:30:04       14 阅读
  8. 前端学习----css基础语法

    2024-06-11 07:30:04       7 阅读
  9. 前端 CSS 经典:CSS 原子化

    2024-06-11 07:30:04       8 阅读
  10. 移动端适配和响应式页面中的常用单位

    2024-06-11 07:30:04       9 阅读
  11. MongoDB 部署分片集群

    2024-06-11 07:30:04       10 阅读