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

R语言如何使用if else基于多列条件mutate生成新变量?

R中多列条件生成新变量的实现方法

首先明确条件优先级(从高到低,满足前面的条件后不再判断后续条件):

  • x、y、z同时为1 → 赋值6
  • G为1 → 赋值5
  • T为1 → 赋值4
  • S为1 → 赋值3
  • y为1 → 赋值2
  • x为1 → 赋值1
  • 所有条件都不满足时默认返回NA

base R 嵌套ifelse实现

首先构造示例数据:

df <- data.frame(
  x = c(1,1,1,1),
  y = c(0,0,1,1),
  z = c(1,0,1,1),
  S = c(0,0,0,1),
  T = c(1,0,0,1),
  G = c(0,0,0,1)
)

使用嵌套向量化ifelse生成新列:

df$new_var <- ifelse(df$x == 1 & df$y == 1 & df$z == 1, 6,
                     ifelse(df$G == 1, 5,
                            ifelse(df$T == 1, 4,
                                   ifelse(df$S == 1, 3,
                                          ifelse(df$y == 1, 2,
                                                 ifelse(df$x == 1, 1, NA)
                                          )
                                   )
                            )
                     )
)

dplyr::case_when 更简洁写法

嵌套ifelse层级多了之后可读性差、容易写错,推荐用dplyr的case_when函数实现:

library(dplyr)

df <- df %>%
  mutate(new_var = case_when(
    x == 1 & y == 1 & z == 1 ~ 6,
    G == 1 ~ 5,
    T == 1 ~ 4,
    S == 1 ~ 3,
    y == 1 ~ 2,
    x == 1 ~ 1,
    .default = NA
  ))

结果验证

运行上述代码后,生成的new_var列结果如下:

原数据行号new_var值对应条件
14T为1
21仅x为1
36x、y、z同时为1
46x、y、z同时为1

注意事项

  • 条件排列顺序直接决定最终结果,必须把优先级更高、更特殊的条件放在最前面
  • 如有新增规则,按照优先级顺序对应添加条件行即可

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 09:45:05