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

如何使用dplyr将数据框所有列名改为标题大小写形式?

解决数据框列名重命名:将蛇形命名转为每个单词首字母大写且保留下划线的格式

问题场景

需要将数据框列名从蛇形命名(如first_name、last_name)转为每个单词首字母大写、下划线保留的格式(First_Name、Last_Name),但使用str_to_title()只能实现首单词首字母大写(得到First_name这类不符合预期的结果)。

测试代码:

library(dplyr)

df <- tribble(
  ~'first_name', ~'last_name', ~'age',
  "John", "Kambusa", 45,
  "Jane", "kumbuka", 40,
)

# 结果不符合预期:得到First_name、Last_name
df |> 
  rename_with(~str_to_title(.x))

可行解决方案

方案1:正则表达式替换

利用stringr的正则匹配,先统一处理首字母,再将下划线后的小写字母转为大写:

library(dplyr)
library(stringr)

df_renamed <- df |>
  rename_with(~ str_replace_all(str_to_title(.x), "_([a-z])", "_\\U\\1", perl = TRUE))

# 查看列名结果
colnames(df_renamed)
# [1] "First_Name" "Last_Name"  "Age"
  • 逻辑:str_to_title()先将每个列名的第一个单词首字母大写,再通过正则_([a-z])匹配下划线后的小写字母,用\\U\\1将捕获到的字母转为大写(需开启perl = TRUE支持该语法)。

方案2:拆分-处理-合并

将列名按下划线拆分,对每个部分单独首字母大写后重新合并:

library(dplyr)
library(stringr)

df_renamed <- df |>
  rename_with(~ {
    # 拆分列名为单词向量
    name_parts <- str_split(.x, "_")[[1]]
    # 每个单词首字母大写
    name_parts <- str_to_title(name_parts)
    # 用下划线合并
    paste(name_parts, collapse = "_")
  })

colnames(df_renamed)
# [1] "First_Name" "Last_Name"  "Age"
  • 逻辑:拆分后逐个处理每个单词的大小写,再合并,避免正则的语法依赖,逻辑更直观。

方案3:使用snakecase包(推荐)

snakecase包专门用于命名格式转换,一行代码即可实现需求:

# 先安装包(首次使用时)
install.packages("snakecase")

library(snakecase)
library(dplyr)

df_renamed <- df |>
  rename_with(~ to_mixed_case(.x, sep_in = "_", sep_out = "_", upper_case = "all"))

colnames(df_renamed)
# [1] "First_Name" "Last_Name"  "Age"
  • 逻辑:to_mixed_case()参数说明:
    • sep_in = "_":输入是下划线分隔的蛇形命名
    • sep_out = "_":输出保留下划线分隔
    • upper_case = "all":每个单词的首字母都大写

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.28 03:22:53