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

如何使用R的dplyr/tidyverse对DataFrame多列应用多条件if/else计算?

问题描述

假设R环境中有如下数据框df:

df <- data.frame(
  A = c(1.4, 2.5, 3.0),
  B = c(4.0, 1.5, 1.7),
  C = c(6.0, 2.4, 2.5),
  D = c(1.0, 2.3, 3.4)
)

需要对指定列A、B、D的每行单元格值执行以下多条件计算:

  • 若值小于2,则加1
  • 若值在2(含)到3(不含)之间,则加3
  • 若值在3(含)到4(不含)之间,则加5
  • 其他情况保持原值不变

计算结果需存入对应的新列A_New、B_New、D_New,要求用dplyr/tidyverse工具实现。

解决方案代码
library(tidyverse)

df_processed <- df %>%
  mutate(
    across(
      .cols = c(A, B, D),
      .fns = ~ case_when(
        .x < 2 ~ .x + 1,
        .x >= 2 & .x < 3 ~ .x + 3,
        .x >= 3 & .x < 4 ~ .x + 5,
        TRUE ~ .x
      ),
      .names = "{col}_New"
    )
  )

# 输出处理后的结果
print(df_processed)

关键逻辑说明

  • across():批量处理指定列,.cols参数锁定需要计算的A、B、D列
  • case_when():按顺序匹配多条件,满足对应规则则执行计算,最后TRUE ~ .x兜底处理所有未匹配的情况(即值≥4时保持原值)
  • .names:通过{col}_New的命名规则,自动为每个原列生成对应的新列名

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.13 10:02:37