如何用gsub函数批量交换列名中特定位置的元素?
用gsub批量调整R数据框列名格式
需要将形如measure_subscale_wave的列名,转换为measure_wave_subscale格式——核心是交换第二个下划线后与第三个下划线后的内容。
现有代码框架如下,需补全gsub的pattern参数,同时修正replacement的小问题:
data_test <- data %>% rename_with( .fn = ~gsub( pattern = 'measure_???_(.*)', # 待补全部分 replacement = '\\1_\\3_\\2', .x ), .cols = matches('^measure') )
完整修正后的代码
data_test <- data %>% rename_with( .fn = ~gsub( pattern = '^(measure_)([^_]+)_([^_]+)$', replacement = '\\1\\3_\\2', .x ), .cols = matches('^measure') )
代码说明
- pattern解析:
^(measure_):精准匹配列名开头的measure_,作为第一个捕获组(对应\\1)([^_]+):匹配measure_之后、第二个下划线之前的所有非下划线字符(即原列名中的subscale部分),作为第二个捕获组(对应\\2)_([^_]+)$:匹配第二个下划线之后的所有非下划线字符(即原列名中的wave部分),作为第三个捕获组(对应\\3)
- replacement解析:
用\\1\\3_\\2将捕获组重新拼接,得到measure_+wave+_+subscale,正好是目标格式measure_wave_subscale。
内容的提问来源于stack exchange,提问作者Tom
相关产品推荐
相关产品推荐

