L'idée est similaire à celle-ci
. Vous pouvez créer deux colonnes supplémentaires en utilisant pmin
un pmax
à regrouper comme suit :
Un data.table
la solution. Mais si vous ne voulez pas data.table, vous pouvez toujours utiliser l'idée. Cependant, il est hautement improbable que vous obteniez plus rapidement que la solution data.table avec juste du code R.
# assuming your data.frame is DF
require(data.table)
DT <- data.table(DF)
# get min of V1,V2 on one column and max on other (for grouping)
DT[, `:=`(id1=pmin(V1, V2), id2=pmax(V1, V2))]
# get max of V3
DT.OUT <- DT[, .SD[which.max(V3), ], by=list(id1, id2)]
# remove the id1 and id2 columns
DT.OUT[, c("id1", "id2") := NULL]
# V1 V2 V3
# 1: 2 1 666
# 2: 100 102 23131
# 3: 10 19 124444
# 4: 10 15 1244
# 5: 100 110 23