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

R语言如何基于多列条件从现有列取值创建数据框新列

R 按多列条件新增列实现方案

你可以直接用条件判断函数匹配规则生成new列,两种常用写法如下:

写法1:dplyr::case_when(逻辑最清晰,推荐)

这种写法把每条条件和对应取值一一对应列出来,后续加改规则很方便,不容易出错:

library(dplyr)

df <- df %>%
  mutate(
    new = case_when(
      a == 2 & b == 2 & c == 1 ~ e,
      a == 2 & b == 1 & c == 2 ~ d,
      a == 2 & b == 2 & c == 2 ~ e,
      # 未匹配到上述规则的行默认赋值NA,可按需补充剩余规则
      TRUE ~ NA_real_
    )
  )

你给出的规则里,a=2、b=2时不管c是1还是2都取e的值,还可以把重复逻辑合并简化代码:

# 简化后版本
df <- df %>%
  mutate(
    new = case_when(
      a == 2 & b == 2 ~ e,
      a == 2 & b == 1 & c == 2 ~ d,
      TRUE ~ NA_real_
    )
  )

写法2:base R 原生实现(无需安装加载第三方包)

不想用tidyverse系列包的话,嵌套ifelse就能实现:

df$new <- with(df, 
  ifelse(a == 2 & b == 2 & c == 1, e,
    ifelse(a == 2 & b == 1 & c == 2, d,
      ifelse(a == 2 & b == 2 & c == 2, e, NA)
    )
  )
)

注意事项

  • 做相等判断时必须用双等号==,不要写成单等号=,否则会意外修改原列的值
  • 当前你给出的3条规则没有覆盖测试数据集中所有行的场景,比如a=1的行、a=2且b=1且c=1的行,这些行目前默认赋值为NA,你可以按照相同格式补充对应规则即可。

运行代码后得到的测试数据集结果如下:

a b c d e new
1 2 2 1 1 4   4
2 2 1 1 3 5  NA
3 1 1 2 5 1  NA
4 2 2 2 2 7   7
5 1 2 1 7 3  NA
6 1 2 2 5 5  NA

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.30 19:51:18