如何使用Dplyr统计分组内最高频次值并处理并列权重?
实现代码
首先加载dplyr包后运行如下逻辑即可:
library(dplyr) result <- data %>% # 统计每个用户下各source的出现频次 count(USER, source, name = "freq") %>% # 按用户分组,仅保留频次最高的source记录 group_by(USER) %>% filter(freq == max(freq)) %>% # 计算权重:并列最高的项均分权重1 mutate(weight = 1 / n()) %>% # 清除中间字段、取消分组得到最终结果 ungroup() %>% select(USER, source, weight)
逻辑说明
该代码适配任意数量的并列最高频场景:
- 单个最高频source时,weight自动赋值为1
- N个source并列最高时,每个source的weight自动赋值为
1/N,和示例中2个并列时赋值0.5的逻辑完全匹配 - 输出结果的字段顺序、数值和需求给出的预期输出完全一致
内容的提问来源于stack exchange,提问作者John Thomas
相关产品推荐
相关产品推荐

