Мне нужно создать фрейм данных с минимальным евклидовым расстоянием между каждой строкой фрейма данных и всеми остальными строками другого фрейма данных. Оба моих фрейма данных большие (около 40 000 строк). Это то, что я мог решить до сих пор.
x<-matrix(c(3,6,3,4,8),nrow=5,ncol=7,byrow = TRUE)
y<-matrix(c(1,4,4,1,9),nrow=5,ncol=7,byrow = TRUE)
sed.dist<-numeric(5)
for (i in 1:(length(sed.dist))) {
sed.dist[i]<-(sqrt(sum((y[i,1:7] - x[i,1:7])^2)))
}
Но это работает только тогда, когда i = j. Мне по существу нужно найти минимальное евклидово расстояние, перебирая каждую строку одну за другой ( y [1,1: 7], затем y [2, 1: 7] и т. д. до i= 5 ) кадра данных "y" со всеми строками кадра данных "x" (x [i, 1: 7]). Каждый раз, когда он это делает, мне нужно найти минимальное евклидово расстояние для каждого вычисления строки i кадра данных y и всех строк кадра данных x и сохранить его в другом кадре данных.
sqrt(colSums((y[1, ] - t(x))^2))
вычисляет расстояние строки 1 вy
со всеми строками вx
. Вы хотите, чтобыmin
этого, а также повторялось для каждой второй строки вy
? - person alexis_laz   schedule 06.03.2014