Мы можем просто удалить последний столбец 'ID' и применить distm
library(geosphere)
distm(df2[-3], df1[-3])
# [,1] [,2] [,3] [,4] [,5]
#[1,] 171.1779 163.2218 165.2558 123.1550 191.56772
#[2,] 282.5995 270.9150 280.1868 126.2177 8.47761
#[3,] 324.5419 313.2399 321.1614 175.4751 63.75154
#[4,] 314.1523 302.6183 311.2599 160.5186 37.96928
data
df1 <- structure(list(longitude = c(-1.482156, -1.482318, -1.482129,
-1.484275, -1.485866), latitude = c(54.90083, 54.90078, 54.90077,
54.90011, 54.89936), ID = structure(1:5, .Label = c("A", "B",
"C", "D", "E"), class = "factor")), class = "data.frame", row.names = c(NA,
-5L))
df2 <- structure(list(longitude = c(-1.48288, -1.485735, -1.48577, -1.485913
), latitude = c(54.89935, 54.89935, 54.89879, 54.89902), ID = c(1,
2, 3, 4)), class = "data.frame", row.names = c(NA, -4L))