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

R语言如何智能汇总含'_sales'的列生成新列,解决rowwise+across求和异常问题

原写法错误原因

你之前使用的md %>% rowwise()%>% mutate(sub_total=across(contains("_sales"),sum))不符合预期,核心是across会对每个匹配到的列单独执行求和,返回多列结果,不会自动合并为单行的汇总值。

以下是两种简洁高效的实现方案:

方案1:tidyverse生态写法

高优先级推荐(性能最优)

用rowSums搭配across,不需要行分组,大样本下运算速度远高于rowwise语法:

library(dplyr)
# 示例数据
ori_data <- data.frame(a_sales=c(1:5),
                       tsalses=c(1:5),
                       b_sales=c(7:11),
                       d_sales=c(1:5))
# 生成汇总列
res <- ori_data %>% 
  mutate(sub_total = rowSums(across(contains("_sales")), na.rm = TRUE))

参数说明:na.rm = TRUE可以避免列中存在NA时汇总结果返回NA,无缺失值时可以删除该参数

rowwise语法修正版

如果需要保留rowwise写法,搭配c_across把选中列转为行向量再求和即可:

res <- ori_data %>%
  rowwise() %>%
  mutate(sub_total = sum(c_across(contains("_sales")), na.rm = TRUE)) %>%
  ungroup() # 处理完建议取消行分组,避免影响后续操作

方案2:基础R写法

不需要加载第三方包,直接用正则匹配选列+rowSums实现:

ori_data$sub_total <- rowSums(ori_data[grep("_sales", colnames(ori_data))], na.rm = TRUE)

以上两种方案都可以自动匹配所有名称包含_sales的列,不管符合条件的列数量多少,都只需要一行代码完成汇总,结果和手动逐列相加完全一致。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 15:36:05