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

R语言按组求和仅统计每个个体首条记录的实现方法咨询

R语言按组求和实现(仅统计每个个体首条记录)

背景说明

  • 示例数据规则:共4个分组,每组包含2个个体,每个个体对应2条记录,总数据量为16条
  • 核心计算指标定义:Func = X * Y + Z
  • 原有实现逻辑:对全部16条记录按分组计算Func的总和
  • 需求:仅取每个个体的第一条记录计算Func,再按分组求和,最终输出长度为4的数值向量,对应4个分组的求和结果

示例数据生成代码

rm(list=ls()); set.seed(1234)
G = 4 # 共4个分组
nTot <- 8 # 总共有8个个体
group <- rep(1:G, rep(4,G)) # 分组标识向量
individualID <- rep(1:nTot, rep(2,nTot)) # 个体标识向量,每个个体对应2条记录

n <- 2 * nTot # 总记录数16条
X <- rbinom(n, 1, 0.5)
Y <- runif(n, 0, 1)
Z <- runif(n, 0, 4)

df1 <- round(data.frame(group, individualID, X, Y, Z), 3)

对应实现代码

基础包实现(无需额外依赖)

# 筛选每个个体第一条记录的索引
first_entry_idx <- !duplicated(individualID)
# 计算全量Func指标
Func <- X * Y + Z
# 仅取首条记录的Func和对应分组,按组求和
GroupSum <- as.numeric(sapply(split(Func[first_entry_idx], group[first_entry_idx]), sum))

输出的GroupSum就是长度为4的结果向量,分别对应4个分组的求和值。

dplyr包实现(逻辑更清晰易维护)

如果习惯使用tidyverse生态的工具,可以用如下代码实现:

library(dplyr)
GroupSum <- df1 %>%
  group_by(individualID) %>%
  slice(1) %>% # 取每个个体的第一条记录
  ungroup() %>%
  mutate(Func = X * Y + Z) %>%
  group_by(group) %>%
  summarise(sum_Func = sum(Func)) %>%
  pull(sum_Func)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 05:48:03