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]