如何使用dplyr重命名含数字与字符混合的多列?
使用dplyr重命名多列(含纯数字/数字字符混合列名)
在dplyr中,rename()和rename_with()是处理列重命名的核心工具,下面针对不同类型的列名给出具体实现:
1. 处理纯数字列名
纯数字列名(如1、2)属于R中的特殊标识符,必须用**反引号(`)**包裹才能正确引用。
单个重命名
先构造示例数据框:
library(dplyr) library(tibble) df <- tibble(`1` = 1:3, `2` = 4:6, x1 = 10:12, y2 = 13:15)
用rename()单独重命名纯数字列:
df_renamed <- df %>% rename( user_id = `1`, # 将列`1`重命名为user_id transaction_count = `2` # 将列`2`重命名为transaction_count )
批量重命名纯数字列
如果有大量纯数字列,用rename_with()结合正则匹配批量处理:
df_renamed <- df %>% rename_with( ~ paste0("numeric_col_", .x), # 给纯数字列加统一前缀 matches("^[0-9]+$") # 匹配所有纯数字列名 )
执行后,列1会变成numeric_col_1,列2变成numeric_col_2。
2. 处理数字与字符混合的列名
这类列名(如x1、y2、score_3)属于常规标识符,直接引用即可,无需反引号。
单个重命名
df_renamed <- df %>% rename( exam_score = x1, # 将x1重命名为exam_score activity_score = y2 # 将y2重命名为activity_score )
批量重命名混合列
比如统一调整列名格式,把x1改成x_01、y2改成y_02:
df_renamed <- df %>% rename_with( ~ gsub("(\\w)(\\d)", "\\1_\\2", .x), # 插入下划线分隔字符与数字 matches("^\\w+\\d+$") # 匹配字符+数字的列名 )
或者给所有混合列加统一前缀:
df_renamed <- df %>% rename_with( ~ paste0("metric_", .x), matches("^[a-z]+\\d+$") )
3. 同时处理两种类型列名的综合示例
# 构造示例数据框 df <- tibble(`1` = 1:5, `3` = 6:10, age_2 = 11:15, score_4 = 16:20) # 混合重命名:单独修改纯数字列,批量修改混合列 final_df <- df %>% rename( id = `1`, # 重命名单个纯数字列 total = `3` # 重命名另一个纯数字列 ) %>% rename_with( ~ gsub("_(\\d)", "_0\\1", .x), # 给数字补前导零,比如age_2→age_02 matches("^\\w+_\\d+$") )
最终列名会变成:id、total、age_02、score_04。
内容的提问来源于stack exchange,提问作者Ketan Mehta
相关产品推荐
相关产品推荐

