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

在R语言中如何计算每个ID对应重复event列值的平均数量

背景

我有如下R语言dataframe,命名为d:

d <- data.frame(ID = c("a","a","a","a","a","a","b","b"),
                event = c("G12","G12","G12","B4","B4","A24","L5","L5"),
                stringsAsFactors=FALSE)

数据样例见下图:
d
该数据集包含2个不同ID,每个ID对应多个event取值,部分event存在重复。

问题需求

我需要计算该数据集内每个ID对应的重复event的平均数量。计算规则为:只要event在对应ID下出现至少2次就算1个重复event,不统计重复次数。以样例数据为例:ID为a的有2个重复event(G12、B4),ID为b的有1个重复event(L5),最终预期结果是(2+1)/2=1.5。

已尝试方案

我参考相关帖子尝试了如下代码,但运行结果没有按ID分组统计重复值,不符合预期:

d %>% summarise(mean = mean(duplicated(event)))

请问应该如何修改代码实现需求?


解决方案

你原来的代码没有按ID分组,且duplicated()统计的是重复行的占比,和需求逻辑不符。可参考如下方案实现:

tidyverse 实现

library(dplyr)
d %>%
  # 按ID分组
  group_by(ID) %>%
  # 统计每个ID下出现次数≥2的event数量
  summarise(dup_event_num = sum(table(event) >= 2)) %>%
  # 计算所有ID的重复event数量均值
  summarise(mean_dup_event = mean(dup_event_num))

运行后输出结果为1.5,和预期一致。

base R 实现

# 按ID分组统计每个ID的重复event数量
dup_count <- aggregate(event ~ ID, d, function(x) sum(table(x) >= 2))
# 计算均值
mean(dup_count$event)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 17:45:03