宽格式转长格式
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等工具进行处理和分析 - 更适合用于统计建模和可视化
- 符合整洁数据的原则
这节课包含一个小测验。开始学习即可作答,并记录你的进度。
这节课包含一个小测验。开始学习即可作答,并记录你的进度。
这节课包含一个小测验。开始学习即可作答,并记录你的进度。
挑战
简单创建一个函数,使用 tidyr 包中的 pivot_longer() 函数,将宽格式的学生考试成绩数据集转换为长格式。该函数应执行以下操作:
- 将输入字符串转换为数据框
- 使用
pivot_longer()将数据从宽格式转换为长格式 - 将结果列重命名为 "subject" 和 "score"
- 先按学生姓名,再按科目排列数据
- 打印结果长格式数据框
亲手试试
# 读取输入
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 在线编译器