Jupyter AI

18 数据处理之数据变形

📅 发表日期: 2024年8月13日

分类: 📈R 语言入门

👁️阅读: --

在上一篇中,我们讨论了数据聚合与汇总,了解了如何对数据进行分组、求和和平均等操作。本篇将围绕数据变形展开,介绍在R中如何对数据进行重塑、转置和展平等操作,以便为后续的可视化及分析做好准备。

数据变形的基本概念

数据变形(Data Reshaping)是指通过各种手段改变数据的格式、结构或形状,使其能够更好地进行分析和可视化。在R中,tidyverse包中的tidyrdplyr是最常用的工具包,用于数据的变形与处理。

宽格式与长格式

在数据分析中,我们通常会遇到宽格式(Wide Format)和长格式(Long Format)数据。宽格式指的是每个组合的变量在一行显示,而长格式则是将变量的每一个值放在单独的一行。

宽格式与长格式示例

考虑一个包含学生成绩的数据集,如下:

学生 数学 英语
张三 85 78
李四 90 82
王五 76 88

这是一个宽格式的数据。如果我们想将其变换为长格式,结果将如下所示:

学生 科目 成绩
张三 数学 85
张三 英语 78
李四 数学 90
李四 英语 82
王五 数学 76
王五 英语 88

使用pivot_longer进行数据转换

在R中,我们可以使用pivot_longer函数将宽格式数据转换为长格式。以下是一个示例:

# 加载tidyverse包
library(tidyverse)

# 创建宽格式数据框
data_wide <- tibble(
  学生 = c("张三", "李四", "王五"),
  数学 = c(85, 90, 76),
  英语 = c(78, 82, 88)
)

# 使用pivot_longer转换为长格式
data_long <- data_wide %>%
  pivot_longer(cols = c(数学, 英语), 
               names_to = "科目", 
               values_to = "成绩")

# 查看结果
print(data_long)

输出结果如下:

# A tibble: 6 x 3
  学生  科目  成绩
  <chr> <chr> <dbl>
1 张三  数学    85
2 张三  英语    78
3 李四  数学    90
4 李四  英语    82
5 王五  数学    76
6 王五  英语    88

使用pivot_wider进行宽格式转换

反之,我们也可以使用pivot_wider函数将长格式数据转换为宽格式。例如,对于上面的data_long数据框,我们可以按以下方式转换回宽格式:

# 使用pivot_wider转换为宽格式
data_wide_back <- data_long %>%
  pivot_wider(names_from = 科目, 
              values_from = 成绩)

# 查看结果
print(data_wide_back)

输出结果将再次为原始的宽格式数据:

# A tibble: 3 x 3
  学生  数学 英语
  <chr> <dbl> <dbl>
1 张三    85    78
2 李四    90    82
3 王五    76    88

数据的转置

数据转置是另一个常见的变形操作,主要用于交换数据框的行和列。在R中,我们可以使用t()函数进行转置。

# 转置数据框
data_transposed <- as.data.frame(t(data_wide))
colnames(data_transposed) <- data_transposed[1, ] # 设置第一行为列名
data_transposed <- data_transposed[-1, ] # 删除第一行

# 查看转置后的数据
print(data_transposed)

总结

本篇文章深入探讨了数据变形的概念及其在R中的实现方法。从宽格式到长格式的转换,再到数据的转置,R语言提供了强大的数据操作功能,帮助我们更有效地整理、分析和可视化数据。

在下一篇中,我们将讨论基础绘图,介绍如何使用R中的基础绘图函数进行数据可视化,为我们的数据分析增添视觉效果。希望你能继续关注!