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

R语言如何按列名相同前缀分组并对同组列逐行求和

R实现按列名前缀分组逐行求和的方法

错误原因

你编写的dplyr代码报错的核心原因是group_by()是用来对数据集的行进行分组的,而你要实现的是对列按前缀分组逐行求和,逻辑完全不匹配。

实现方法

方法1:基础R实现(逻辑最接近pandas的写法)

这个方法和你用的pandas按列分组的思路完全一致:

# 提取所有列名的第一个字符作为分组前缀
prefix <- substr(colnames(df), 1, 1)
# 按前缀拆分列,逐行求和
result <- as.data.frame(sapply(split.default(df, prefix), rowSums))

运行后得到的result就是你需要的输出。

方法2:tidyverse(dplyr+tidyr)通用实现

如果前缀数量不固定,你可以用长表转换的思路实现通用逻辑:

library(tidyverse)

result <- df %>%
  # 宽表转长表,拆分列名提取前缀
  pivot_longer(
    cols = everything(),
    names_to = c("prefix", NA),
    names_pattern = "^(.)(.*)$"
  ) %>%
  # 按行号和前缀分组求和
  group_by(row_id = row_number(), prefix) %>%
  summarise(value = sum(value), .groups = "drop") %>%
  # 转回宽表
  pivot_wider(names_from = prefix, values_from = value) %>%
  # 移除辅助的行号列
  select(-row_id)

方法3:固定前缀的简洁写法

如果你的列前缀是已知的且数量不多,可以直接用这种更直观的写法:

library(dplyr)

result <- df %>%
  rowwise() %>%
  transmute(
    a = sum(c_across(starts_with("a"))),
    b = sum(c_across(starts_with("b"))),
    c = sum(c_across(starts_with("c")))
  ) %>%
  ungroup()

内容的提问来源于stack exchange,提问作者U13-Forward

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 04:36:03