Menu
CoddyTech

宽格式转长格式

Coddy R 中的数据处理 课程的第 9 课,共 14 课。

本课将重点介绍如何使用 tidyr 包中的 pivot_longer() 函数,将数据从宽格式转换为长格式。

了解宽格式和长格式

宽格式:每个变量都有自己的列。
长格式:变量以键值对的形式存储,其中一列存放变量名,另一列存放值。

pivot_longer() 函数

tidyr 中的 pivot_longer() 函数用于将数据从宽格式转换为长格式。基本语法如下:

pivot_longer(data, cols, names_to = "key", values_to = "value")

示例:

# 加载所需的库
library(tidyr)

# 创建一个宽格式示例数据集
wide_data <- data.frame(
  name = c("Alice", "Bob", "Charlie"),
  math = c(85, 76, 90),
  science = c(92, 88, 75),
  history = c(78, 82, 85)
)

# 转换为长格式
long_data <- pivot_longer(wide_data, 
                          cols = c(math, science, history),
                          names_to = "subject",
                          values_to = "score")

print(long_data)

输出:

# 一个 tibble:9 × 3
  name    subject score
  <chr>   <chr>   <dbl>
1 Alice   math       85
2 Alice   science    92
3 Alice   history    78
4 Bob     math       76
5 Bob     science    88
6 Bob     history    82
7 Charlie math       90
8 Charlie science    75
9 Charlie history    85

原本有 4 列:name、math、science 和 history,现在有 3 列:name、subject、score。

了解参数

  • cols:指定要转换成长格式的列。
  • names_to:为新列命名,该列存放宽格式中的列名。
  • values_to:为新列命名,该列存放值。

数据分析中的重要性

通常更推荐使用长格式数据,因为它:

  • 更容易使用 dplyr 等工具进行处理和分析
  • 更适合用于统计建模和可视化
  • 符合整洁数据的原则
quiz icon自我测试

这节课包含一个小测验。开始学习即可作答,并记录你的进度。

quiz icon自我测试

这节课包含一个小测验。开始学习即可作答,并记录你的进度。

quiz icon自我测试

这节课包含一个小测验。开始学习即可作答,并记录你的进度。

challenge icon

挑战

简单

创建一个函数,使用 tidyr 包中的 pivot_longer() 函数,将宽格式的学生考试成绩数据集转换为长格式。该函数应执行以下操作:

  1. 将输入字符串转换为数据框
  2. 使用 pivot_longer() 将数据从宽格式转换为长格式
  3. 将结果列重命名为 "subject" 和 "score"
  4. 先按学生姓名,再按科目排列数据
  5. 打印结果长格式数据框

亲手试试

# 读取输入
con <- file("stdin", "r")
input_string <- suppressWarnings(readLines(con))

# 将输入字符串转换为数据框
data <- read.csv(text = input_string, stringsAsFactors = FALSE)

# 加载所需的包
suppressPackageStartupMessages(library(tidyr))
suppressPackageStartupMessages(library(dplyr))

# TODO: 在下方编写代码来转换数据
# 使用 pivot_longer() 将宽格式转换为长格式
# 将列重命名为 "subject" 和 "score"
# 先按学生姓名,再按科目排列数据


# 打印转换后的长格式数据框
print(result)

R 中的数据处理中的所有课

自己练习: R 在线编译器