R语言:如何实现跨学生的会话(session)连续编号而非分组重置
解决方案
你可以分两步实现全局连续的会话编号:先在每个学生组内计算会话切换标记,再通过累计前面所有学生的会话总数生成全局偏移量,最后叠加得到连续编号。
修改后的代码如下:
data1 <- data %>% arrange(Name, Time) %>% group_by(Name) %>% # 计算组内的会话编号(从0开始) mutate(group_session = cumsum(c(0, diff(Time) > minutes(30)))) %>% # 统计每个学生的总会话数 mutate(session_count = max(group_session) + 1) %>% ungroup() %>% # 计算全局偏移量:前面所有学生的会话总数之和,第一个学生偏移量为0 mutate(global_offset = cumsum(lag(session_count, default = 0))) %>% # 组内编号 + 偏移量 = 全局连续会话编号 mutate(session_id = group_session + global_offset) %>% # 可选:移除中间辅助列 select(-group_session, -session_count, -global_offset)
代码说明
group_session:保留你原有的组内会话计数逻辑,每个学生的会话从0开始session_count:统计每个学生的总会话数量global_offset:用cumsum和lag计算每个学生的起始偏移,比如第二个学生的偏移等于第一个学生的总会话数,确保编号衔接不中断session_id:最终的全局连续会话编号,会在所有学生间递增,不会随学生分组重置
内容的提问来源于stack exchange,提问作者Sanem
相关产品推荐
相关产品推荐

