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

使用R语言dplyr按TIME分组计算GROUP的SCORE总和问题

解决按TIME分组计算SCORE总和并扩展数据框的问题

原始数据

DATA = data.frame(GROUP = c(1,2,1,2,1,2), TIME = c(1,1,2,2,3,3), SCORE = c(0,7,9,8,3,4))

目标数据

WANT = data.frame(GROUP = c(1,2,3,1,2,3,1,2,3), TIME = c(1,1,1,2,2,2,3,3,3), SCORE = c(0,7,7,9,8,17,3,4,7))

需求说明

对每个TIME值,计算该时间点下所有GROUP的SCORE之和,并将这个总和作为GROUP=3的行,添加到对应TIME的分组中。

错误代码问题分析

你尝试的代码存在三处问题:

  • 同时使用group_by(TIME)和rowwise()会冲突,rowwise()会强制按行执行操作,破坏分组求和的逻辑
  • mutate(3' = sum())存在语法错误,列名的引号不匹配,且sum()`未指定要求和的目标列
  • 完全没处理添加GROUP=3新行的逻辑

正确解决方案

方法一:分步实现(清晰易懂)

library(dplyr)

# 1. 计算每个TIME的SCORE总和,生成GROUP=3的行
sum_rows <- DATA %>%
  group_by(TIME) %>%
  summarise(SCORE = sum(SCORE), .groups = "drop") %>%
  mutate(GROUP = 3)

# 2. 合并原始数据与总和行,按TIME、GROUP排序得到目标结果
WANT <- bind_rows(DATA, sum_rows) %>%
  arrange(TIME, GROUP)

方法二:单管道操作(简洁高效)

library(dplyr)
library(tibble)

WANT <- DATA %>%
  group_by(TIME) %>%
  group_modify(~ bind_rows(.x, tibble(GROUP = 3, SCORE = sum(.x$SCORE)))) %>%
  ungroup() %>%
  arrange(TIME, GROUP)

运行上述任意代码,得到的WANT数据框与目标要求完全一致。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.12 06:55:01