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

在R中如何将因子的多个水平合并为新的分组水平?

R语言因子水平分组的简便实现方案

你当前使用的多层嵌套ifelse写法可读性差、容易出现语法错误、后续调整分组规则的维护成本很高,推荐以下两种更简便的实现方式:

方案1:使用dplyr的case_when函数

该方案逻辑清晰,每一行对应一个分组规则,便于阅读和调整:

library(dplyr)

neigh_agg <- function(df) {
  df %>%
    mutate(Neighborhood2 = case_when(
      # 匹配Neigh_1分组的所有水平
      Neighborhood %in% c("Blmngtn", "Blueste", "ClearCr", "CollgCr", "Crawfor", 
                          "Gilbert", "Greens", "GrnHill", "NPkVill", "NWAmes", 
                          "SawyerW", "Veenker") ~ "Neigh_1",
      # 匹配Neigh_2分组的所有水平
      Neighborhood %in% c("BrDale", "BrkSide", "Edwards", "IDOTRR", "MeadowV", 
                          "OldTown", "Sawyer", "SWISU") ~ "Neigh_2",
      # 匹配Neigh_3分组的所有水平
      Neighborhood %in% c("NAmes", "Mitchel") ~ "Neigh_3",
      # 匹配Neigh_4分组的所有水平
      Neighborhood %in% c("StoneBr", "NoRidge", "NridgHt") ~ "Neigh_4",
      # 剩余所有水平归为Neigh_5
      TRUE ~ "Neigh_5"
    ) %>% as.factor())
}

方案2:使用命名向量做映射

该方案适合分组数量多、映射关系需要复用的场景,运行效率更高:

library(dplyr)

# 提前构建水平→分组的映射关系
neigh_map <- c(
  # Neigh_1分组映射
  Blmngtn = "Neigh_1", Blueste = "Neigh_1", ClearCr = "Neigh_1", CollgCr = "Neigh_1",
  Crawfor = "Neigh_1", Gilbert = "Neigh_1", Greens = "Neigh_1", GrnHill = "Neigh_1",
  NPkVill = "Neigh_1", NWAmes = "Neigh_1", SawyerW = "Neigh_1", Veenker = "Neigh_1",
  # Neigh_2分组映射
  BrDale = "Neigh_2", BrkSide = "Neigh_2", Edwards = "Neigh_2", IDOTRR = "Neigh_2",
  MeadowV = "Neigh_2", OldTown = "Neigh_2", Sawyer = "Neigh_2", SWISU = "Neigh_2",
  # Neigh_3分组映射
  NAmes = "Neigh_3", Mitchel = "Neigh_3",
  # Neigh_4分组映射
  StoneBr = "Neigh_4", NoRidge = "Neigh_4", NridgHt = "Neigh_4",
  # Neigh_5分组映射
  Somerst = "Neigh_5", Timber = "Neigh_5"
)

neigh_agg <- function(df) {
  df %>%
    mutate(
      Neighborhood2 = as.factor(neigh_map[as.character(Neighborhood)])
      # 如果存在未匹配的水平,可以加下面这行设置默认值
      # Neighborhood2 = replace_na(Neighborhood2, "Neigh_5")
    )
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 09:15:03