如何使用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
相关产品推荐
相关产品推荐

