首页 > 解决方案 > 按组和列之间查找最小值

问题描述

我试图在不同的列和组中找到最小值。我的数据的一个小样本看起来像这样:

     group cut group_score_1 group_score_2
1        a   1             3           5.0
2        b   2             2           4.0
3        a   0             2           2.5
4        b   3             5           4.0
5        a   2             3           6.0
6        b   1             5           1.0

我想按组分组,对于每个组,在两个组分数中找到包含最小组分数的行,然后还得到包含最小值的列的名称(group_score_1 或 group_score_2),所以基本上我的结果应该是像这样的东西:

      group cut group_score_1 group_score_2
1        a   0             2           2.5
2        b   1             5           1.0

我尝试了一些想法,最终想出了将其分成几个新的数据框,按组过滤并选择相关列,然后使用which.min(),但我确信有一种更有效的方法可以做到这一点。不知道我错过了什么。

标签: rmin

解决方案


我们可以使用data.table方法

library(data.table)
setDT(df)[df[, .I[which.min(do.call(pmin, .SD))], 
     group, .SDcols = patterns('^group_score')]$V1]
#   group cut group_score_1 group_score_2
#1:     a   0             2           2.5
#2:     b   1             5           1.0

推荐阅读