长格式转宽格式
Coddy R 中的数据处理 课程的第 10 课,共 14 课。
将数据从长格式转换为宽格式,是数据整理中的一项重要技能,尤其适用于创建更紧凑的数据表示形式。本课将重点介绍如何使用 tidyr 包中的 pivot_wider() 函数,将数据从长格式转换为宽格式。
1. 了解长格式和宽格式
长格式:变量以键值对的形式存储,一列存放变量名,另一列存放值。
宽格式:每个变量都有自己的列。
2. pivot_wider() 函数
tidyr 中的 pivot_wider() 函数用于将数据从长格式转换为宽格式。它的基本语法如下:
pivot_wider(data, names_from = "key", values_from = "value")3. 示例:使用 pivot_wider()
来看一个示例:
# 加载所需的库
library(tidyr)
# 创建一个长格式示例数据集
long_data <- data.frame(
name = c("Alice", "Alice", "Alice", "Bob", "Bob", "Bob"),
subject = c("math", "science", "history", "math", "science", "history"),
score = c(85, 92, 78, 76, 88, 82)
)
# 转换为宽格式
wide_data <- pivot_wider(long_data,
names_from = "subject",
values_from = "score")
print(wide_data)
4. 了解参数
names_from:指定哪一列包含宽格式中新列的名称。values_from:指定哪一列包含新列的值。
5. 处理多个值列
你可以同时转换多个值列:
long_data_multi <- data.frame(
name = c("Alice", "Alice", "Bob", "Bob"),
year = c(2022, 2023, 2022, 2023),
score = c(85, 90, 76, 82),
rank = c(2, 1, 3, 2)
)
wide_data_multi <- pivot_wider(long_data_multi,
names_from = year,
values_from = c(score, rank))
print(wide_data_multi)
掌握 pivot_wider() 函数后,你就能高效地将数据从长格式重新整理为宽格式,根据 R 中的特定分析需求创建更紧凑的数据表示形式。
这节课包含一个小测验。开始学习即可作答,并记录你的进度。
这节课包含一个小测验。开始学习即可作答,并记录你的进度。
这节课包含一个小测验。开始学习即可作答,并记录你的进度。
挑战
简单使用 tidyr 包中的 pivot_wider() 函数,创建一个函数,将学生成绩的长格式数据集转换为宽格式。该函数应执行以下操作:
- 将输入字符串转换为数据框
- 使用
pivot_wider()将数据从长格式转换为宽格式 - 按学生姓名排列生成的数据框(使用
%>% arrange(student)) - 打印宽格式数据框
亲手试试
# 读取输入
con <- file("stdin", "r")
input_string <- suppressWarnings(readLines(con))
# 将输入字符串转换为数据框
df <- read.csv(text = input_string, stringsAsFactors = FALSE)
# 加载所需的库
suppressPackageStartupMessages(library(tidyr))
suppressPackageStartupMessages(library(dplyr))
# TODO: 在下方编写代码,转换数据框
# 提示:使用 pivot_wider() 函数将长格式转换为宽格式
# 别忘了按学生姓名对生成的数据框排序
# 打印结果
# print(result)R 中的数据处理中的所有课
自己练习: R 在线编译器