如何用pivot_longer将宽格式数据转为含congruency键的长格式
用pivot_longer转换带_c/_i后缀的宽格式数据
假设你的宽格式数据结构类似这样(以反应时rt、准确率acc为例):
library(tidyverse) # 模拟原始宽数据 wide_df <- tibble( id = 1:3, rt_c = c(450, 520, 480), rt_i = c(610, 580, 630), acc_c = c(1, 1, 0), acc_i = c(0, 1, 1) )
直接用pivot_longer的正则匹配功能就能实现转换,核心是通过names_pattern拆分列名的前缀和后缀:
long_df <- wide_df %>% pivot_longer( cols = -id, # 保留id列,其余列转长格式 names_pattern = "(.*)_(c|i)", # 捕获前缀(如rt/acc)和后缀(c/i) names_to = c(".value", "congruency") # .value对应前缀作为新列名,congruency存后缀 )
转换结果说明
转换后的长格式数据会按id和congruency展开,保留原前缀对应的指标列:
# A tibble: 6 × 4 id congruency rt acc <int> <chr> <dbl> <dbl> 1 1 c 450 1 2 1 i 610 0 3 2 c 520 1 4 2 i 580 1 5 3 c 480 0 6 3 i 630 1
注意事项
- 如果列名前缀包含下划线,需要把
names_pattern调整为([^_]+)_(c|i),确保只匹配最后一个下划线后的后缀 - 所有要转换的列必须严格遵循
前缀_c/前缀_i的命名规则,否则无法被正确匹配
内容的提问来源于stack exchange,提问作者SBL
相关产品推荐
相关产品推荐

