R语言中按用户+日期双分组计算心率平均值的语法问题
解决R语言分组计算每人每日平均心率的问题
你的问题出在连续调用group_by()上——第二次调用group_by(Date)会替换掉之前的分组(Id),所以最终只按日期计算了整体平均值,没有区分用户。
正确的代码写法
把两个分组变量(Id和Date)放在同一个group_by()里,就能实现按用户+日期的分组统计:
hr_avg <- hr_per_second %>% group_by(Id, Date) %>% summarize(daily_avg_hr = mean(Value, na.rm = TRUE)) %>% ungroup()
细节说明
- 添加
na.rm = TRUE是为了忽略心率数据中的缺失值(如果有的话),避免计算结果变成NA summarize()里给结果列命名(比如daily_avg_hr),方便后续数据关联- 最后加
ungroup()可以取消分组状态,避免后续操作时意外继承分组规则
针对大数据的小建议
因为你的数据集很大,还可以试试这些优化:
- 如果
dplyr处理速度不够,可尝试用data.table包,它处理大数据的效率更高,语法也简洁:
library(data.table) setDT(hr_per_second) hr_avg <- hr_per_second[, .(daily_avg_hr = mean(Value, na.rm = TRUE)), by = .(Id, Date)]
内容的提问来源于stack exchange,提问作者Stephanie Perez
相关产品推荐
相关产品推荐

