用data.table选择组内最大值,同时以多列作为分组依据 R

使用data.table在R中进行数据处理时,如何按照多个列进行分组,并找出每个组内的最大值。当最大值在多行中出现时,如何仅保留一行。参考StackOverflow上的问题和解决方案。
摘要由CSDN通过智能技术生成
ID <- c(1,1,1,2,2,2,2,3,3,3)
Value <- c(2,3,5,2,5,8,17,3,5,5)
Event <- c(1,1,2,1,2,1,2,2,2,2)

group <- data.frame(Subject=ID, pt=Value, Event=Event)
# 将数据从data frame格式转还成data.table格式
library(data.table)
group <- as.data.table(group)

最值在多行出现,容忍取出多行时

group[group[, .I[pt == max(pt)], 。(Subject,Event)]$V1]

输出如果最值在多行同时存在,但是要求只取出一行:

group[group[, .I[which.max(pt)], by=c("Subject","Event")]$V1]

在这里插入图片描述p.s: by - c(“列名1”,“列名2”) 的效果和 .(“列名1”,“列名2”) 是一样的,详见知乎 data.table包整理贴

Reference:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值