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

R语言数据处理:合并多VOT前缀列为单列并生成response列

处理R语言data.frame的宽表转长表需求

需求说明

  • 将所有以VOT为前缀的列替换为两列:VOT(取值为原列后缀的数值,最终需除以1000)和response(取值为原列的0/1值)
  • 保留其他非VOT前缀的列

实现代码

使用tidyverse工具集的pivot_longer函数完成宽表转长表,同时完成数值转换:

# 加载依赖包
library(tidyverse)

# 数据处理流程
data_processed <- data %>%
  # 将所有VOT开头的列转为长格式
  pivot_longer(
    cols = starts_with("VOT"),
    names_to = "VOT_temp",
    values_to = "response"
  ) %>%
  # 提取数值并转换为目标格式
  mutate(
    VOT = as.numeric(str_remove(VOT_temp, "VOT ")) / 1000
  ) %>%
  # 调整列顺序并移除临时列
  select(Participant, Level, `Place or articulation`, VOT, response) %>%
  # 按需求排序,匹配示例顺序
  arrange(Participant, `Place or articulation`, desc(VOT))

输出示例

处理后的数据前6行如下:

Participant Level Place or articulation    VOT response
1    Valentin    A1              Bilabial  0.000        0
2    Valentin    A1              Bilabial  0.005        0
3    Valentin    A1              Bilabial  0.010        0
4    Valentin    A1              Bilabial  0.015        0
5    Valentin    A1              Bilabial  0.020        0
6    Valentin    A1              Bilabial -0.010        1

代码解释

  • pivot_longer:把多个VOT开头的宽列转换为长格式,cols参数指定要转换的列,names_to存储原列名,values_to存储原列的0/1值
  • str_remove(VOT_temp, "VOT "):从临时列中去掉"VOT "前缀,提取出后缀的数值字符串
  • as.numeric(...) / 1000:将字符串转为数值型,再除以1000得到最终的VOT值
  • select:调整列的顺序,和示例输出保持一致;arrange用于按参与者、发音部位和VOT值排序,让结果和示例顺序匹配

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.22 03:47:24