如何对DataFrame中受试者的连续相同试验分组求均值并编号?
解决方法
你可以用dplyr或者data.table包实现需求,核心是先识别每个受试者下连续相同的Event Full分组,再对每组计算均值并编号。
方法一:使用dplyr包
library(dplyr) # 处理数据 result <- example %>% # 按受试者分组 group_by(Subject) %>% # 生成连续相同Event的组编号:当前行Event与前一行不同时,累加计数 mutate(Num = cumsum(`Event Full` != lag(`Event Full`, default = first(`Event Full`))) + 1) %>% # 按受试者、组编号、Event分组,计算Score均值 group_by(Subject, Num, `Event Full`) %>% summarise(Score = mean(Score), .groups = "drop") # 查看结果 result
方法二:使用data.table包(更简洁)
library(data.table) # 转换为data.table格式 setDT(example) # 按受试者+连续Event组分组,计算均值并生成组编号 result <- example[, .(Num = .GRP, Score = mean(Score)), by = .(Subject, rleid(`Event Full`), `Event Full`)][, rleid := NULL] # 查看结果 result
关键逻辑说明
- 两种方法的核心都是识别连续相同的
Event Full片段:- dplyr中用
lag()对比当前行与前一行的Event Full,配合cumsum()生成连续组的编号; - data.table中直接用
rleid()函数,它会为连续相同的观测生成唯一组ID,适配这类场景。
- dplyr中用
- 按「受试者+连续组ID」分组计算均值,自动区分同一受试者下非连续的相同标签组。
内容的提问来源于stack exchange,提问作者jo_
相关产品推荐
相关产品推荐

