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

R语言如何计算数据框中每个ID对应不同事件数的平均值

问题背景

现有如下R数据框d:

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

数据共包含2个由ID标识的主体,每个主体对应多条event记录:ID=a共有6条event记录,其中唯一值共5条;ID=b共有2条event记录,全部为唯一值。

需求

计算数据集中每个主体对应的唯一event数量的平均值,示例数据的期望计算结果为:(5+2)/2 = 3.5。

现有方案问题

尝试运行如下代码时报错:

d %>%
  group_by(ID) %>%
  summarise(mean = mean(tally(unique(event))))

解决方案

错误原因

tally()是用于统计分组观测行数的函数,仅接受数据集作为输入,传入向量unique(event)会触发类型错误。统计分组内唯一值数量可直接使用dplyr内置的n_distinct()函数。

可行实现

方案1:tidyverse 实现

library(dplyr)
# 先分组计算每个ID的唯一event数,再求平均
d %>%
  group_by(ID) %>%
  summarise(uniq_event = n_distinct(event)) %>%
  pull(uniq_event) %>%
  mean()

也可以合并为一步输出汇总结果:

d %>%
  group_by(ID) %>%
  summarise(uniq_event = n_distinct(event)) %>%
  summarise(avg_uniq_event = mean(uniq_event))

方案2:base R 实现

mean(tapply(d$event, d$ID, function(x) length(unique(x))))

两种方案运行后均可得到期望结果3.5。


内容的提问来源于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:48:03