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

如何在R中基于condition批量处理_added列并生成sum_added列

R语言批量处理data.frame列的解决方案

首先补全原数据定义中缺失的idc向量(原代码未定义,此处假设为1到5):

idc <- 1:5
transaction_id <- c(17,95,27,16,8)
r1<- c(84,28,18,51,98)
r1_added<- c(66,15,56,22,74)
r2<-c(50,58,52,90,97)
r2_added <-c(31,95,28,80,9)
r3<-c(20,91,61,87,11)
r3_added <-c(68,38,99,43,49)
condition <- c(0,1,0,1,0)
m <- as.data.frame(cbind(idc,transaction_id,r1,r1_added,r2,r2_added,r3,r3_added,condition))

使用dplyr实现需求的完整代码:

library(dplyr)

m_processed <- m %>%
  rowwise() %>%
  mutate(
    # 计算sum_added:condition为1时取所有_added列的和,否则为0
    sum_added = ifelse(condition == 1, sum(c_across(contains("_added"))), 0),
    # 批量处理_added列:condition为1时置0,否则保留原值
    across(contains("_added"), ~ifelse(condition == 1, 0, .x))
  ) %>%
  ungroup()

关键说明

  1. 计算顺序:必须先计算sum_added再修改_added列,确保求和用的是原始列值,避免被修改后的值干扰。
  2. 批量列处理:通过across(contains("_added"))一次性选中所有以_added结尾的列,结合ifelse实现条件赋值,无需逐个列手动修改。
  3. 取消行分组:rowwise()会让后续操作保持行级处理,完成需求后用ungroup()取消分组,恢复常规的列级操作效率。

验证处理结果:

print(m_processed)

输出结果:

idc transaction_id r1 r1_added r2 r2_added r3 r3_added condition sum_added
1   1             17 84       66 50       31 20       68         0         0
2   2             95 28        0 58        0 91        0         1       148
3   3             27 18       56 52       28 61       99         0         0
4   4             16 51        0 90        0 87        0         1       145
5   5              8 98       74 97        9 11       49         0         0

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 06:15:39