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

如何对多组列执行进阶pivot_longer转换实现数据重塑?

解决方案:用tidyr将宽表转换为长表

直接用tidyverse包中的tidyr::pivot_longer()函数就能高效完成这个转换,完美匹配你的列名格式(Sx_A/Sx_B)。

完整代码示例

# 先加载tidyverse包(未安装先执行install.packages("tidyverse"))
library(tidyverse)

# 你的原始数据
bd <- data.frame(Operator=c("Rater1", "Rater2", "Rater3"),
                 S1_A=c("Good", "Good", "Bad"),
                 S1_B=c(3,2,3),         
                 S2_A=c("Don't know", "Bad", "Don't know"),
                 S2_B=c(4,4,2))

# 转换为目标长表格式
long_bd <- bd %>%
  pivot_longer(
    cols = -Operator,  # 排除Operator列,处理剩余所有列
    names_to = c("Sound", ".value"),  # 按下划线拆分列名:第一部分存为Sound,第二部分作为新列名
    sep = "_"  # 指定拆分列名的分隔符
  )

# 查看转换结果
print(long_bd)

关键参数说明

  • cols = -Operator:指定要转换的列是除Operator外的所有列,不管你有S1到S40多少个声音列,这个写法都通用。
  • names_to = c("Sound", ".value"):核心逻辑,把拆分后的列名第一部分(如S1、S2)存入Sound列,第二部分(A、B)作为新列名,对应的值自动填充到这些列中。
  • sep = "_":告诉函数用下划线作为列名的拆分标记。

转换后结果示例

# A tibble: 6 × 4
  Operator Sound A          B
  <chr>    <chr> <chr>  <dbl>
1 Rater1   S1    Good       3
2 Rater1   S2    Don't know  4
3 Rater2   S1    Good       2
4 Rater2   S2    Bad        4
5 Rater3   S1    Bad        3
6 Rater3   S2    Don't know  2

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.17 10:52:11