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

如何修改代码用aggregate sum生成与DataFrame尺寸匹配的新变量?

解决方法

你的错误原因是aggregate()返回的是仅包含4个cluster对应总和的小数据集,而mutate()需要为原数据的8行每一行生成对应值,两者尺寸不匹配导致报错。下面两种方法都能解决问题:

方法一:使用dplyr分组求和(推荐)

直接通过group_by()按cluster分组后,用sum(weight)计算每组总和,mutate()会自动将这个值填充到组内的每一行:

data.test <- data.frame(cluster = c(1, 1, 2, 2, 3, 3, 4, 4),
                        weight = c(240, 240, 300, 300, 500, 500, 250, 250))

data.test <- data.test %>% 
  group_by(cluster) %>% 
  mutate(weight_total = sum(weight)) %>% 
  ungroup() # 可选,取消数据的分组状态,方便后续操作

方法二:结合aggregate与left_join

先通过aggregate()计算每组总和,再用left_join()将总和匹配回原数据的对应行:

data.test <- data.frame(cluster = c(1, 1, 2, 2, 3, 3, 4, 4),
                        weight = c(240, 240, 300, 300, 500, 500, 250, 250))

# 先计算每个cluster的总和并改名
cluster_sum <- aggregate(weight ~ cluster, data.test, sum) %>% 
  rename(weight_total = weight)

# 合并到原数据
data.test <- data.test %>% 
  left_join(cluster_sum, by = "cluster")

两种方法最终都会生成包含8行的weight_total变量,每个cluster下的两行都会对应该组的weight总和。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.05 16:07:34