如何选择每组中最大值的行 [英] How to select the row with the maximum value in each group

查看:212
本文介绍了如何选择每组中最大值的行的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

在一个对每个主题有多个观察值的数据集中,我想取一个仅包含每个记录的最大数据值的子集.例如,使用以下数据集:

In a dataset with multiple observations for each subject I want to take a subset with only the maximum data value for each record. For example, with a following dataset:

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)

对象1、2和3的最大pt值分别为5、17和5.

Subject 1, 2, and 3 have the biggest pt value of 5, 17, and 5 respectively.

我如何首先找到每个主题的最大pt值,然后将此观察值放在另一个数据框中?结果数据框应仅对每个主题具有最大的pt值.

How could I first find the biggest pt value for each subject, and then, put this observation in another data frame? The resulting data frame should only have the biggest pt values for each subject.

推荐答案

以下是data.table解决方案:

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

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

If you want to keep all the entries corresponding to max values of pt within each group:

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的第一个最大值:

If you'd like just the first max value of 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

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

In this case, it doesn't make a difference, as there aren't multiple maximum values within any group in your data.

这篇关于如何选择每组中最大值的行的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆