【发布时间】:2021-08-30 16:32:00
【问题描述】:
我有两组 first_data。第一个是一个 100 (x_0,y_0) 的数据:
x_0 <- seq(1, 10, by=1)
y_0 <- seq(1, 10, by=1)
data <- expand.grid(x_0,y_0)
第二个是5(x,y)个数据,叫做second_data:
x <- c(2,4,6,8,10)
y <- c(3,5,7,9,11)
color <- c("green", "green", "red", "red", "red")
second_data<- data.frame(x,y, color)
我需要对 3NN 应用欧几里得距离公式,以根据欧几里得距离确定第一个数据集中的每个点是绿色还是红色。基本上,我需要找到每100对点的距离,5次,然后使用下面的代码选择距离最小的3个。
我认为我需要一个循环,但我没有正确理解:
out <- rep(NA, nrow(first_data))
K=3
for(k in 1:nrow(first_data)){
green <- mutate(second_data, distance = sqrt(x - first_data[k]^2)+(y-first_data[k]^2)) %>%
slice_min(distance, n=K) %>% filter(color=='green') %>% nrow()
out[k] <- ifelse(new_blue >= (K+1)/2, 'green', 'red')
}
【问题讨论】:
-
您想要包含距离吗?如果你想推广到
n最短距离,你可能最好输出data.frame和标题x_0|y_0|x|y|Color|Distance|Rank.
标签: r loops statistics nearest-neighbor