在R中过滤具有太多max和min的行

时间:2017-02-20 10:55:16

标签: r filter max min

我的数据集如下所示。

   a_metric   b_metric c_metric    tl_metric        mpr
1  1.0079123  0.4121975 1.0510727  0.5280035  -0.03690215
2  -0.3479917   -0.3185338 -0.3652249 -0.1644014 0.01175352
3  1.7148652   2.7669706   1.8156309   0.6885553 -0.05121204
   rate     1st_metric 2nd_metric 3rd_metric 4th_metric IDX
1  -0.7771414 0.2600359  0.3368508 0.3989317  0.4422435   1
2  0.1782411 -0.2824974 -0.3050651 -0.3225591 -0.3318396 2
3  -0.2663647 2.7014838  2.7858352  2.8452738 2.8524606   3

我正在尝试使用以下命令过滤整个数据集中具有1st_metric,2nd_metric,3rd_metric和min值的最大值的行

k[(which.max(k$1st_metric))&(which.max(k$2nd_metric))&(which.max(k$3rd_metric))&(which.min(k$mpr)),]

它不返回第3行,而是返回整个数据集。我在这里做错了什么?

1 个答案:

答案 0 :(得分:1)

您的代码实际上被评估为

k[3 & 3 & 3 & 3] 

如果您在控制台中输入3 & 3 & 3 & 3,它会为您提供#[1] TRUE

因此它返回k[TRUE],选择整个数据框。

您需要的是一些评估为k[3, ]

的条件

我们可以使用,

k[which(k$X1st_metric == max(k$X1st_metric) & k$X2nd_metric == max(k$X2nd_metric)
      & k$X3rd_metric == max(k$X3rd_metric) & k$mpr == min(k$mpr)), ]

#  a_metric  b_metric c_metric tl_metric      mpr        rate 
#3 1.714865  2.766971 1.815631 0.6885553 -0.05121204 -0.2663647

#  X1st_metric X2nd_metric  X3rd_metric X4th_metric IDX
#3   2.701484    2.785835    2.845274    2.852461   3

或者修改你的代码

k[unique(c(which.max(k$X1st_metric), which.max(k$X2nd_metric) , 
           which.max(k$X3rd_metric) , which.min(k$mpr))), ]