如何在R的data.table中按分组返回第二大值及对应id列?
在R的data.table中按分组获取第二大值并保留分组ID
首先加载依赖包并创建示例数据:
library(data.table) sample_dt <- data.table( myid=c("A","B","B","A","B","B","C","C","A","A"), mycol1 =c(101,-108,140,140,-150,-140,-111,101,150,140) )
两种可行解法
解法1:分组排序后提取唯一值的第二个元素
这种方式能自动处理重复最大值的场景,先对每组的mycol1降序排序,去重后取第二个元素:
result_dt <- sample_dt[, .(mycol1_secondmax = unique(sort(mycol1, decreasing = TRUE))[2]), by = myid]
解法2:去重后分组排序取第二行
先对每组数据去重,再按mycol1降序排列,最后提取每组的第二行数据:
result_dt <- sample_dt[!duplicated(.SD), .SD[order(-mycol1)][2], by = myid]
结果验证
运行任意一种解法后,输出结果与预期完全匹配:
result_dt # myid mycol1_secondmax # 1: A 140 # 2: B -108 # 3: C -111
内容的提问来源于stack exchange,提问作者Neal Barsch
相关产品推荐
相关产品推荐

