You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用R语言(含dplyr)计算数据框的条件最大值?

解决每个受试者各阶段的Session最大值问题

我来帮你找出代码里的问题,再提供几种可行的解决方案~

你的代码为什么不对?

你用count(ID,Phase,Session)之后,数据会按ID、Phase、Session这三个字段分组统计频数,每个分组里的Session值都是唯一的。这时候再用mutate(MaxSession = max(Session)),其实只是把当前分组的Session值复制了一遍,根本没有计算每个ID+Phase组合下的Session最大值,自然得不到预期结果。

正确的dplyr解决方案

核心思路是按ID和Phase分组,然后对每个组的Session取最大值,用group_by() + summarize()就能实现:

library(dplyr)

# 假设你的原始数据框叫DataFrame
MaxSessions <- DataFrame %>%
  group_by(ID, Phase) %>%
  summarize(MaxSession = max(Session, na.rm = TRUE),  # 取最大值,na.rm处理可能的缺失值
            .groups = "drop")  # 取消分组,得到整洁的结果数据框

运行这段代码后,就能得到你想要的结构:

ID    Phase   MaxSession
  <chr> <chr>        <int>
1 A1    Train1           2
2 A1    Train2           3
3 B1    Train1           1
4 B1    Train2           3

不用dplyr的基础R方案

如果不想用dplyr,可以用基础R的aggregate()函数,逻辑一样:

# 按ID和Phase分组,对Session取最大值
MaxSessions <- aggregate(Session ~ ID + Phase, data = DataFrame, FUN = max)
# 把默认的列名"Session"改成"MaxSession"
colnames(MaxSessions)[3] <- "MaxSession"

另外也可以用data.table(适合大数据集,效率更高):

library(data.table)
setDT(DataFrame)
MaxSessions <- DataFrame[, .(MaxSession = max(Session)), by = .(ID, Phase)]

内容的提问来源于stack exchange,提问作者Tom H

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.29 09:03:53