R语言dplyr分组汇总计算唯一组合、去重均值与总时长
R多列分组计算唯一个体指标实现方案
核心问题
需按country、state、date三列分组,同时计算三类指标,原有代码仅能正确计算唯一组合数、duration总和,无法正确计算唯一个体的平均权重:
- 唯一
household_id-individual_id组合总数量 - 唯一个体对应的
weights平均值:同户同个体重复出现时仅取1次权重参与计算 duration列总和:所有行的duration均需累加,不得因个体重复剔除对应行的duration
注意:直接对全表先去重再汇总的方案会丢失重复个体行的duration值,导致总时长计算错误;直接对weights列取unique计算会把不同个体的相同权重误去重,均值结果失真。
可运行正确代码
基于dplyr实现,在分组内部单独对个体维度去重计算权重均值,不干扰全量行的duration求和逻辑:
library(dplyr) result <- data %>% group_by(country, state, date) %>% summarise( # 计算唯一个体组合数 total_unique = n_distinct(household_id, individual_id), # 分组内对唯一个体去重后取权重均值 Average_weights = cur_data() %>% distinct(household_id, individual_id, .keep_all = TRUE) %>% pull(weights) %>% mean(), # 全量行累加duration Tot_Duration = sum(duration), # 汇总后解除分组,避免后续操作受分组影响 .groups = "drop" )
样例数据验证结果
用提供的测试数据集运行代码,输出结果完全符合预期:
- US-TX-20220601分组:
total_unique=5,Average_weights=150,Tot_Duration=210 - IND-AP-20220601分组:
total_unique=1,Average_weights=100,Tot_Duration=150
内容的提问来源于stack exchange,提问作者joy_1379
相关产品推荐
相关产品推荐

