我的数据集如下所示。
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行,而是返回整个数据集。我在这里做错了什么?
答案 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))), ]