Это может быть то, что вы ищете:
d.small[,
mindist := sqrt(min((GKODE - haltestelle.small[["y_Koord_Ost"]])^2 +
(GKODN - haltestelle.small[["x_Koord_Nord"]])^2)),
by = id]
# id GKODE GKODN mindist
# 1: 100 2608850 1262583 10488.486
# 2: 10000012 2612952 1267232 6766.463
# 3: 11776807 2612952 1267232 6766.463
# 4: 10000061 2623360 1247413 3641.148
# 5: 10000223 2622938 1259411 6124.327
# 6: 9997602 2609194 1262383 10190.944
Данные (в воспроизводимом формате):
d.small <- fread("id GKODE GKODN
100 2608850 1262583
10000012 2612952 1267232
11776807 2612952 1267232
10000061 2623360 1247413
10000223 2622938 1259411
9997602 2609194 1262383")
haltestelle.small <- fread("y_Koord_Ost x_Koord_Nord
2633061 1257737
2630544 1252831
2628497 1256841
2629649 1255767
2619156 1264531
2619741 1247012")
С небольшими правками ваш код не содержит ошибок:
for (i in 1:nrow(d.small)) {
diff.ost <- d.small[i, GKODE] - haltestelle.small[, y_Koord_Ost]
diff.nord <- d.small[i, GKODN] - haltestelle.small[, x_Koord_Nord]
dist.oev[i,1] <- sqrt(min(diff.ost^2 + diff.nord^2)) # take sqrt outside min for efficiency
dist.oev[i,2] <- which.min(diff.ost^2 + diff.nord^2) # sqrt unnecessary (monotonic transformation)
}
Получить индексы также можно примерно так:
d.small[,
c("mindist", "mindist_index") := {
dist = (GKODE - haltestelle.small[["y_Koord_Ost"]])^2 + (GKODN - haltestelle.small[["x_Koord_Nord"]])^2
.(sqrt(min(dist)), which.min(dist))
},
by = id]