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

使用dplyr的group_by计算分组求和时的问题及解决方法

按月份和人员分组求和错误的原因与解决办法

原始数据

数据框mydata内容如下:

Date.created   team_member   TaskTime
2022/08          Karina         0.33
2022/08          Jelena         0.33
2022/08          Elina          0.67
2022/08          Jelena         0.67
2022/08          Karina         0.33
2022/07          Jelena         0.33
2022/07          Jelena         0.33
2022/07          Karina         0.67
2022/07          Elina          0.33
2022/07          Elina          0.67

期望结果

需要按月份和人员分组计算TaskTime的总和,期望输出:

2022/08          Karina         0.66
2022/08          Jelena         1
2022/08          Elina          0.67
2022/07          Jelena         0.66
2022/07          Karina         0.67
2022/07          Elina          1

尝试的错误代码

library(dplyr)
mydata2 <- mydata %>% 
  group_by(mydata$Date.created, mydata$team_member) %>% 
  summarise(TaskTime=sum(mydata$TaskTime))

运行后得到的是整个数据框TaskTime的全局总和(4.66),而非分组求和结果。


问题原因

  • 在dplyr的管道操作中,使用mydata$列名会直接引用原始数据框的完整列,而非管道传递过来的分组后的数据子集。
  • 虽然group_by(mydata$Date.created, mydata$team_member)能生成分组标识,但后续summarise中的sum(mydata$TaskTime)会忽略分组限制,直接计算整个原始数据的总和,导致每个分组都返回相同的全局值。

解决方法

在dplyr管道流中,直接使用列名即可,无需添加数据框前缀:

library(dplyr)
mydata2 <- mydata %>% 
  group_by(Date.created, team_member) %>% 
  summarise(TaskTime = sum(TaskTime), .groups = "drop")
  • 说明:
    1. group_by(Date.created, team_member)会基于当前管道中的数据进行分组,正确识别每个月份+人员的组合。
    2. sum(TaskTime)会针对每个分组内的TaskTime值求和,得到预期的分组结果。
    3. .groups = "drop"参数用于在求和后取消分组状态,返回常规的数据框格式;如果需要保留分组结构,可以省略该参数。

内容的提问来源于stack exchange,提问作者Диана

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 12:31:25