我有两个数据框,其中
我使用
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
中给出最小距离的行id; - 一列是最小距离;
- 一列是
df1
中给出第二小距离的行id; - 一列是第二小距离。
谢谢。
apply
和match
来完成它。 - Hack-R