Not too far from what you had
a %>% group_by(id) %>% summarise(which.min(abs(b-1.43)))
# A tibble: 2 × 2
# id `which.min(abs(b - 1.43))`
#
# 1 A 2
# 2 B 3
Or if you need the values, rather than the indices:
a %>% group_by(id) %>% summarise(b[which.min(abs(b-1.43))])
# A tibble: 2 × 2
# id `b[which.min(abs(b - 1.43))]`
#
# 1 A 1.5
# 2 B 1.4