У меня есть два кадра данных: df1
с справочными данными и df2
с новыми данными. Для каждой строки в df2
мне нужно найти наилучшую (и вторую) подходящую строку до df1
с точки зрения расстояния от хамминга.Вычисление попарного расстояния Хэмминга между всеми строками двух целых матриц/кадров данных
Я использовал e1071
пакет для расчета расстояния от помех. Расстояние Хэмминга между двумя векторами x
и y
может быть вычислена как, например:
x <- c(356739, 324074, 904133, 1025460, 433677, 110525, 576942, 526518, 299386,
92497, 977385, 27563, 429551, 307757, 267970, 181157, 3796, 679012, 711274,
24197, 610187, 402471, 157122, 866381, 582868, 878)
y <- c(356739, 324042, 904133, 959893, 433677, 110269, 576942, 2230, 267130,
92496, 960747, 28587, 429551, 438825, 267970, 181157, 36564, 677220,
711274, 24485, 610187, 404519, 157122, 866413, 718036, 876)
xm <- sapply(x, intToBits)
ym <- sapply(y, intToBits)
distance <- sum(sapply(1:ncol(xm), function(i) hamming.distance(xm[,i], ym[,i])))
и полученное расстояние 25. Тем не менее, мне нужно сделать это для всех рядов df1
и df2
. Тривиальный метод принимает двойное петлевое гнездо и выглядит ужасно медленным.
Любые идеи, как это сделать более эффективно? В конце концов, мне нужно добавить к df2
:
- столбец с идентификатором строки из
df1
, что дает самое низкое расстояние; - столбец с самым низким расстоянием;
- столбец с номером строки от
df1
, который дает 2-е минимальное расстояние; - колонка со вторым самым низким расстоянием.
Спасибо.
должен быть в состоянии сделать это с помощью 'apply' и' match' –