This might an easy one. Here\'s the data:
dat <- read.table(header=TRUE, text=\"
Seg ID Distance
Seg46 V21 160.37672
Seg72 V85 191.24400
Seg37
We can subset the rows with which.min
. After grouping with 'ID', we slice
the rows based on the position of minimum 'Distance'.
library(dplyr)
dat %>%
group_by(ID) %>%
slice(which.min(Distance))
A similar option using data.table
would be
library(data.table)
setDT(dat)[, .SD[which.min(Distance)], by = ID]
If you prefer ddply
you could do this
library(plyr)
ddply(dat, .(ID), summarize,
Seg = Seg[which.min(Distance)],
Distance = min(Distance))
# ID Seg Distance
#1 V147 Seg159 14.74852
#2 V171 Seg233 193.01636
#3 V21 Seg46 160.37672
#4 V85 Seg373 167.38930