Я запускаю кластеризацию k-значений на фрейме данных df1, и я ищу простой подход к вычислению ближайшего центра кластера для каждого наблюдения в новом фрейме данных df2 (с теми же именами переменных). Подумайте о df1 как наборе обучения и df2 на тестовом наборе; Я хочу сгруппировать на обучающем наборе и назначить каждую тестовую точку на правильный кластер.
Я знаю, как это сделать с помощью функции apply
и нескольких простых пользовательских функций (предыдущие сообщения по этой теме обычно предлагают нечто подобное):
df1 <- data.frame(x=runif(100), y=runif(100))
df2 <- data.frame(x=runif(100), y=runif(100))
km <- kmeans(df1, centers=3)
closest.cluster <- function(x) {
cluster.dist <- apply(km$centers, 1, function(y) sqrt(sum((x-y)^2)))
return(which.min(cluster.dist)[1])
}
clusters2 <- apply(df2, 1, closest.cluster)
Однако я готовлю этот пример кластеризации для курса, в котором ученики будут незнакомы с функцией apply
, поэтому я бы предпочел, если бы я мог назначить кластеры df2 со встроенной функцией. Существуют ли какие-либо удобные встроенные функции для поиска ближайшего кластера?