I have a data frame:
df<-data.frame(P = c("A","A","A", "B","B","B", "C", "C", "C"),
index = c("ind1","ind2","ind3","ind1","ind2","ind3","ind1","ind2","ind3"),
var = c(2,1,1,8,5,4,2,8,6))
I would like to get ALL the minimum valueS of var
and their associated index
for each values of P
.
I can do this:
DT <- data.table(df)
DT[ ,.SD[which.min(var)], by = P]
which gives only one minimum value of var
(the first one) by P
:
P index var 1: A ind2 1 2: B ind3 4 3: C ind1 2
And I would like:
P index var 1: A ind2 1 2: A ind3 1 2: B ind3 4 3: C ind1 2
Ideas?
From the help page for which.min
, you'll note that it says:
Determines the location, i.e., index of the (first) minimum or maximum of a numeric (or logical) vector.
If you wanted all values that match the minimum, you should try using ==
. Thus, continuing with your approach, try:
DT[, .SD[var == min(var)], by = P]
## P index var
## 1: A ind2 1
## 2: A ind3 1
## 3: B ind3 4
## 4: C ind1 2