在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)
数据样例见下图:
该数据集包含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
相关产品推荐
相关产品推荐

