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

如何按指定规则重命名R语言中因子(factor)的水平?

按指定规则重命名因子水平的实现方案

需求说明

需要对因子水平应用以下重命名规则:

  • 若因子水平的字符长度≥3:转换为句首大写格式(sentence case)(仅首个单词首字母大写,其余小写)
  • 若因子水平的字符长度<3:转换为标题大小写格式(title case)(每个单词首字母大写)

示例:

  • home doing nothing → Home doing nothing
  • yes → Yes
  • good practice → Good practice(若需多单词全首字母大写,可参考下文补充调整)

实现代码

通过自定义函数结合fct_relabel即可实现规则,具体代码如下:

library(tidyverse)

# 定义根据长度判断的重命名函数
rename_factor_levels <- function(x) {
  if (nchar(x) >= 3) {
    str_to_sentence(x)  # 长度≥3时用句首大写
  } else {
    str_to_title(x)     # 长度<3时用标题大小写
  }
}

# 加载并预处理原始数据
vars <- c("a", "b", "c", "d", "e")

mydata <- tribble(
  ~"a", ~"b", ~"c", ~"d", ~"e", ~"id",
  "yes", "school in Kenya", "r", 10, "good practice", 1,
  "no", "home doing nothing", "python", 12, "doing well", 3,
  "no", "school in Tanzania", "c++", 35, "by walking", 4,
  "yes", "home practising", "c", 65, "practising everyday", 5,
  "no", "home", "java", 78, "sitting alone", 7
) %>%
  mutate(across(.cols = vars, ~as_factor(.)))

# 对所有因子列应用重命名规则
mydata_renamed <- mydata %>%
  mutate(across(where(is.factor), ~fct_relabel(., rename_factor_levels)))

结果验证

查看处理后各因子列的水平:

# 列a的水平("yes"、"no"长度为3,转为句首大写)
levels(mydata_renamed$a)
#> [1] "Yes" "No"

# 列b的水平(所有水平长度≥3,转为句首大写)
levels(mydata_renamed$b)
#> [1] "School in kenya"     "Home doing nothing"  "School in tanzania" 
#> [4] "Home practising"     "Home"

# 列c的水平("r"、"c"长度<3,转为标题大小写;其余长度≥3转为句首大写)
levels(mydata_renamed$c)
#> [1] "R"     "Python" "C++"   "C"     "Java"

补充调整(匹配示例中的多单词标题格式)

若需要让多单词的因子水平(如good practice)转换为每个单词首字母大写的标题格式,可修改自定义函数,增加单词数量的判断:

rename_factor_levels <- function(x) {
  # 多单词时用标题大小写
  if (str_count(x, "\\w+") > 1) {
    str_to_title(x)
  } 
  # 单个单词且长度≥3时用句首大写
  else if (nchar(x) >= 3) {
    str_to_sentence(x)
  } 
  # 单个单词且长度<3时用标题大小写
  else {
    str_to_title(x)
  }
}

此时good practice会转换为Good Practice,完全匹配示例要求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 05:50:37