Ich habe zwei Datenrahmen, df1
mit Referenzdaten und df2
mit neuen Daten. Für jede Reihe in df2
, muss ich die beste (und die zweitbeste) passende Zeile zu df1
in Bezug auf Hamming-Abstand finden.Rechnen paarweise Hamming Abstand zwischen allen Reihen von zwei ganzzahligen Matrizen/Datenrahmen
Ich habe e1071
Paket verwendet, um Hamming-Abstand zu berechnen. Hamming-Distanz zwischen zwei Vektoren x
und y
können als beispielsweise berechnet werden:
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])))
und der resultierende Abstand ist 25. Dennoch muss ich tun dies für alle Reihen von df1
und df2
. Eine triviale Methode benötigt ein doppeltes Loop-Nest und sieht schrecklich langsam aus.
Irgendwelche Ideen, wie man das effizienter macht? Am Ende muss ich df2
anfügen:
- eine Spalte mit der Reihe von ID
df1
, die den niedrigsten Abstand ergibt; - eine Spalte mit dem niedrigsten Abstand;
- eine Spalte mit der Zeilen-ID von
df1
, die den zweitniedrigsten Abstand ergibt; - eine Spalte mit dem zweitniedrigsten Abstand.
Danke.
sollte in der Lage sein, es mit 'apply' und' match' zu tun –