You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在R语言中使用pivot_longer实现多列数据宽转长的技术咨询

问题描述

现有如下格式的数据集,每行对应一所学校,包含该校两名受访学生的姓名及两份问卷回答:

df <- data.frame(
  school = c("School 1", "School 2", "School 3"),
  Student1_Name = c("Name1A", "Name1B", "Name1C"),
  Student1_Resp1 = c(1,1,2),
  Student1_Resp2 = c(2,1,2),
  Student2_Name = c("Name2A", "Name2B", "Name2C"),
  Student2_Resp1 = c(2,2,2),
  Student2_Resp2 = c(1,2,1)
)

数据预览:

> df
    school Student1_Name Student1_Resp1 Student1_Resp2 Student2_Name Student2_Resp1 Student2_Resp2
1 School 1        Name1A              1              2        Name2A              2              1
2 School 2        Name1B              1              1        Name2B              2              2
3 School 3        Name1C              2              2        Name2C              2              1

需要使用pivot_longer函数将数据转换为以下格式:

school Student_Name Student_Resp1 Student_Resp2
1 School 1       Name1A             1             2
2 School 1       Name2A             2             1
3 School 2       Name1B             1             1
4 School 2       Name2B             2             2
5 School 3       Name1C             2             2
6 School 3       Name2C             2             1
解决方法

使用tidyr包的pivot_longer函数,通过正则表达式拆分列名实现宽表转长表:

library(tidyr)

df_long <- df %>%
  pivot_longer(
    cols = -school,
    names_to = c("temp", ".value"),
    names_pattern = "(Student\\d+)_(.*)"
  ) %>%
  select(-temp)

参数说明:

  • cols = -school:指定除school外的所有列参与转换
  • names_to = c("temp", ".value"):拆分列名后,第一部分存入临时列temp,第二部分作为新的列名(.value是特殊关键字,代表保留字段值的列)
  • names_pattern = "(Student\\d+)_(.*)":用正则表达式匹配列名结构,将StudentX和后续的Name/Resp1/Resp2拆分为两部分

转换后的结果与需求完全一致:

> df_long
# A tibble: 6 × 4
  school   Student_Name Student_Resp1 Student_Resp2
  <chr>    <chr>                 <dbl>         <dbl>
1 School 1 Name1A                   1             2
2 School 1 Name2A                   2             1
3 School 2 Name1B                   1             1
4 School 2 Name2B                   2             2
5 School 3 Name1C                   2             2
6 School 3 Name2C                   2             1

内容的提问来源于stack exchange,提问作者unaeem

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.30 11:27:33