如何计算日期列中各ID访问次数的均值与标准差
各用户访问记录数的均值、标准差计算方法
你之前用summarize没得到正确结果,核心原因是跳过了按用户id分组统计单用户访问次数的步骤,直接对原始明细行做聚合,统计口径错了。
正确实现逻辑
计算分两步:
- 按用户id分组,统计每个id对应的日期记录条数,也就是单用户访问次数
- 基于第一步得到的「单用户-访问次数」数据集,计算整体的均值和标准差
代码实现
方法1:dplyr 实现(最常用)
首先加载包、构造和示例一致的测试数据:
library(dplyr) # 构造示例数据集 df <- data.frame( id = c(1, 1, 2, 2, 2, 3), date = c("2015-02-23", "2015-04-24", "2018-05-23", "2022-12-05", "2022-12-06", "2021-05-21") )
运行统计代码:
df %>% # 按id分组计数,得到每个用户的访问次数,列名设为visit_count count(id, name = "visit_count") %>% # 基于单用户访问次数计算统计量 summarise( visit_mean = mean(visit_count), visit_sd = sd(visit_count) )
运行后输出结果和手动计算一致:
- 访问次数均值
visit_mean= 2 - 样本标准差
visit_sd= 1
注:R内置的
sd()默认计算的是样本标准差(自由度为n-1),如果需要计算总体标准差,自行替换公式即可。
方法2:基础R实现(无需加载第三方包)
# 统计每个id的访问次数 visit_count_per_user <- as.numeric(table(df$id)) # 计算统计量 visit_mean <- mean(visit_count_per_user) visit_sd <- sd(visit_count_per_user)
常见错误原因
如果直接在原始明细数据集上调用summarise计算,比如写类似summarise(mean = mean(n()))的代码,本质是在统计全表总行数的聚合值,没有拆分到单个用户维度计数,自然得不到正确结果。
内容的提问来源于stack exchange,提问作者D. Fowler
相关产品推荐
相关产品推荐

