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
相关产品推荐
相关产品推荐

