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

R语言DataFrame:如何对指定列行求和并排除特定列?

问题修正方案

原代码的错误点

  • 数据框名称不匹配:你定义的数据框是data,但后续代码用了df,会触发对象不存在的错误。
  • 前缀匹配错误:starts_with("col_")中的下划线多余,实际列名是col1、col2这类不带下划线的,应该改为starts_with("col")。
  • 列筛选逻辑错误:不能用names(df) != ends_with("_max")这种写法,正确的否定后缀匹配应该用!ends_with("_max")。
  • 操作逻辑偏差:summarise(across(...))是对每列计算总和(列维度聚合),而你需要的是行求和(每行内符合条件的列相加),应该用mutate来生成新列。

修正后的代码

方法1:使用rowSums(简洁高效)

# 统一数据框名称
df <- data.frame(newid= c(212,132,354,222,263,235,233,263,106,135,144),
                 col1= c(1,2,2,1,4,3,2,4,0,5,0),
                 col2= c(1,1,0,3,2,4,1,0,1,3,5),
                 col3= c(1,1,0,3,2,4,1,0,1,3,5),
                 col4= c(1,1,0,3,2,4,1,0,1,3,5),
                 col_max= c("NM","mn","PA","OH","KL","AB","OT","HA","AM","LA","GA"))

# 生成行求和列
df <- df %>%
  mutate(row_total = rowSums(across(starts_with("col") & !ends_with("_max")), na.rm = TRUE))

方法2:使用rowwise+sum(适配复杂行内计算)

df <- df %>%
  rowwise() %>%
  mutate(row_total = sum(c_across(starts_with("col") & !ends_with("_max")), na.rm = TRUE)) %>%
  ungroup()

结果说明

修正后的代码会在原数据框中新增一列row_total,每一行的值对应该行内所有以col开头且不以_max结尾的列的求和结果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.09 11:20:28