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

如何用R语言的dplyr包根据其他列条件修改多列值?

使用dplyr处理数据框的条件赋值问题

原始数据框

cond1cond2abcd
1098897889
1045543456
00342335667
002112478
1111289
113441232

需求

当cond1和cond2列的值均为0时,将a、b列设置为0,c、d列设置为1,其余行保留原数值。处理后的理想结果如下:

理想结果数据框

cond1cond2abcd
1098897889
1045543456
000011
000011
1111289
113441232

生成原始数据的R代码

library(tidyverse)
cond1 = c(1,1,0,0,1,1)
cond2 = c(0,0,0,0,1,1)
a = c(98,45,34,21,1,34)
b = c(89,54,233,12,1,4)
c = c(78,34,56,4,2,123)
d = c(89,56,67,78,89,2)
data = tibble(cond1,cond2,a,b,c,d);data

dplyr实现方案

方法1:逐列使用case_when

直接对每一列单独设置条件逻辑,适合列数较少的场景:

data_processed <- data %>%
  mutate(
    a = case_when(cond1 == 0 & cond2 == 0 ~ 0, TRUE ~ a),
    b = case_when(cond1 == 0 & cond2 == 0 ~ 0, TRUE ~ b),
    c = case_when(cond1 == 0 & cond2 == 0 ~ 1, TRUE ~ c),
    d = case_when(cond1 == 0 & cond2 == 0 ~ 1, TRUE ~ d)
  )

方法2:使用across批量处理列

利用across函数对同规则的列批量操作,代码更简洁高效,适合列数较多的场景:

data_processed <- data %>%
  mutate(
    # 对a、b列应用相同规则:满足条件时设为0,否则保留原值
    across(c(a, b), ~ case_when(cond1 == 0 & cond2 == 0 ~ 0, TRUE ~ .x)),
    # 对c、d列应用相同规则:满足条件时设为1,否则保留原值
    across(c(c, d), ~ case_when(cond1 == 0 & cond2 == 0 ~ 1, TRUE ~ .x))
  )

运行上述代码后,data_processed即为符合需求的数据框。

内容的提问来源于stack exchange,提问作者Homer Jay Simpson

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 10:01:08