Menu
CoddyTech

长格式转宽格式

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 中的特定分析需求创建更紧凑的数据表示形式。

quiz icon自我测试

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

quiz icon自我测试

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

quiz icon自我测试

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

challenge icon

挑战

简单

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

  1. 将输入字符串转换为数据框
  2. 使用 pivot_wider() 将数据从长格式转换为宽格式
  3. 按学生姓名排列生成的数据框(使用 %>% arrange(student))
  4. 打印宽格式数据框

亲手试试

# 读取输入
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 在线编译器