为了账号安全,请及时绑定邮箱和手机立即绑定

如何在每个组中选择具有最大值的行

如何在每个组中选择具有最大值的行

FFIVE 2019-06-14 16:55:12
如何在每个组中选择具有最大值的行目前我有一个问题如下。在每个主题存在多个观察的数据集中,我希望在该数据集的子集中只选择记录的最大数据。例如,对于数据集,如下所示: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。首先,如何找到每个主题的最大pt值,然后将这个观察结果放到另一个数据框架中?这意味着这个子集对于每个主题只有最大的pt值。
查看完整描述

3 回答

?
森林海

TA贡献2011条经验 获得超2个赞

这是一个data.table解决办法:

require(data.table) ## 1.9.2group <- 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

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


查看完整回答
反对 回复 2019-06-14
?
桃花长相依

TA贡献1860条经验 获得超8个赞

最直观的方法是在dplyr中使用group_by和top_n函数。

    group %>% group_by(Subject) %>% top_n(1, pt)

你得到的结果是

    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


查看完整回答
反对 回复 2019-06-14
?
芜湖不芜

TA贡献1796条经验 获得超7个赞

使用的较短的解决方案data.table:


setDT(group)[, .SD[which.max(pt)], by=Subject]

#    Subject pt Event

# 1:       1  5     2

# 2:       2 17     2

# 3:       3  5     2


查看完整回答
反对 回复 2019-06-14
  • 3 回答
  • 0 关注
  • 487 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信