对于数据帧中的每个点 (x,y),我想计算从该点到数据帧中没有相同“组”标签的所有其他点的欧几里德距离之和。这是我想要实现的一个 hacky for 循环版本:
# some fake data
d <- data.frame(group=rep(c('a','b','c'),each=3), x=sample(1:9), y=sample(1:9), z=NA)
for (i in 1:nrow(d)) {
d2 <- subset(d,group!=d$group[i])
d$z[i] <- sum(sqrt((d$x[i]-d2$x)^2 + (d$y[i]-d2$y)^2))
}
例如,点 a1 的期望值应该是从 a1 到 b1、b2、b3、c1、c2、c3 的距离之和,但不包括距离 a1-a2 或 a1-a3。有没有一种矢量化的方式来实现这一点?我确信这是一个明显的解决方案......我尝试了各种配置,by()
但apply()
似乎无法找到答案。