首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >选择每组中具有最大值的行

选择每组中具有最大值的行
EN

Stack Overflow用户
提问于 2014-07-03 23:54:12
回答 14查看 139.6K关注 0票数 125

在具有每个对象的多个观察值的数据集中。对于每个主题,我希望选择具有最大值'pt‘的行。例如,使用以下数据集:

代码语言:javascript
复制
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值。

EN

回答 14

Stack Overflow用户

回答已采纳

发布于 2014-07-04 00:11:52

这是一个data.table解决方案:

代码语言:javascript
复制
require(data.table) ## 1.9.2
group <- as.data.table(group)

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

代码语言:javascript
复制
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的第一个最大值

代码语言:javascript
复制
group[group[, .I[which.max(pt)], by=Subject]$V1]
#    Subject pt Event
# 1:       1  5     2
# 2:       2 17     2
# 3:       3  5     2

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

票数 120
EN

Stack Overflow用户

发布于 2016-02-18 07:06:34

最直观的方法是在dplyr中使用group_bytop_n函数

代码语言:javascript
复制
    group %>% group_by(Subject) %>% top_n(1, pt)

你得到的结果是

代码语言:javascript
复制
    Source: local data frame [3 x 3]
    Groups: Subject [3]

      Subject    pt Event
        (dbl) (dbl) (dbl)
    1       1     5     2
    2       2    17     2
    3       3     5     2
票数 92
EN

Stack Overflow用户

发布于 2015-04-08 01:12:47

使用data.table的更短的解决方案

代码语言:javascript
复制
setDT(group)[, .SD[which.max(pt)], by=Subject]
#    Subject pt Event
# 1:       1  5     2
# 2:       2 17     2
# 3:       3  5     2
票数 43
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24558328

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档