在一个数据集中,每个主题都有多个观察结果.对于每个主题,我想 Select 最大值为'pt'的行.例如,使用以下数据集:

ID    <- c(1,1,1,2,2,2,2,3,3)
Value <- c(2,3,5,2,5,8,17,3,5)
Event <- c(1,1,2,1,2,1,2,2,2)

group <- data.frame(Subject=ID, pt=Value, Event=Event)
#   Subject pt Event
# 1       1  2     1
# 2       1  3     1
# 3       1  5     2 # max 'pt' for Subject 1
# 4       2  2     1
# 5       2  5     2
# 6       2  8     1
# 7       2 17     2 # max 'pt' for Subject 2
# 8       3  3     2
# 9       3  5     2 # max 'pt' for Subject 3

受试者1、2和3的最大pt值分别为5、17和5.

我怎样才能先找到每个受试者的最大pt值,然后将观察结果放入另一个数据框中?生成的数据帧应仅具有每个受试者的最大pt值.

推荐答案

以下是data.table种解决方案:

require(data.table) ## 1.9.2
group <- as.data.table(group)

如果要在每个组中保留与最大值pt对应的所有条目:

group[group[, .I[pt == max(pt)], by=Subject]$V1]
#    Subject pt Event
# 1:       1  5     2
# 2:       2 17     2
# 3:       3  5     2

如果只需要第一个最大值pt:

group[group[, .I[which.max(pt)], by=Subject]$V1]
#    Subject pt Event
# 1:       1  5     2
# 2:       2 17     2
# 3:       3  5     2

在这种情况下,这没有什么区别,因为数据中的任何组中都没有多个最大值.

R相关问答推荐

使用facet_wrap()时如何将面板标题转换为脚注?

过滤Expand.Grid的结果

手工PCA上的载体与输出双图不匹配

在水平条形图中zoom x_轴

如何在ggplot 2 geom_segment图表中将UTC转换为EET?

MCMC和零事件二元逻辑回归

如何 bootstrap glm回归、估计95%置信区间并绘制它?

使用ggsankey调整Sankey图中单个 node 上的标签

传递ggplot2的变量作为函数参数—没有映射级别以正确填充美学

有效识别长载体中的高/低命中

将Posict转换为数字时的负时间(以秒为单位)

Ggplot2中geom_tile的动态zoom

如何在R中平滑地绘制线图(不拟合)?

使用R中的dist()迭代ID匹配的欧几里德距离

在多页PDF中以特定布局排列的绘图列表不起作用

在R中创建连续的期间

将项粘贴到向量中,并将它们分组为x的倍数,用空格分隔

WRS2包中带有bwtrim的简单ANOVA抛出错误

Conditional documentr::R中数据帧的summarize()

网络抓取新闻标题和时间