计算R中数据框中多对点之间的欧氏距离

Calculate Euclidean distance between multiple pairs of points in dataframe in R

我正在尝试计算 R 数据框中点对之间的欧几里得距离,每对点都有一个 ID:

ID <- sample(1:10, 10, replace=FALSE)
P <- runif(10, min=1, max=3)
S <- runif(10, min=1, max=3)

testdf <- data.frame(ID, P, S)

我找到了几种计算 R 中欧几里得距离的方法,但我要么得到一个错误,只返回 1 个值(因此它计算整个向量之间的距离),要么我最终得到一个矩阵我只需要第 4 列,每对之间的距离(列 'P' 和 'S.')我对矩阵有点困惑,所以我不确定如何处理该结果。

尝试制作一个函数并将其应用于 2 列,但出现错误:

testdf$V <- apply(testdf[ , c('P', 'S')], 1, function(P, S) sqrt(sum((P^2, S^2)))

 # Error in FUN(newX[, i], ...) : argument "S" is missing, with no default

然后尝试使用统计包中的 dist() 函数,但它只有 returns 1 个值: (如果我按照这里的方法同样的问题:https://www.statology.org/euclidean-distance-in-r/

P <- testdf$P
S <- testdf$S
testProbMatrix <- rbind(P, S)
stats::dist(testProbMatrix, method = "euclidean")
# returns only 1 distance 

Returns一个矩阵 (这里有一个很好的解释为什么:

stats::dist(cbind(P, S), method = "euclidean")

但我很困惑如何从矩阵中提取距离并将它们附加到每对点的正确 ID。我不明白为什么我必须制作一个矩阵而不是仅仅将函数应用于数据框 - 矩阵一直让我感到困惑。 我认为这是与此处 () 相同的问题,但对于 R 而不是 Python

感谢您的帮助!

如果您只想向数据框添加另一列,请试试这个

testdf$distance <- sqrt((P^2 + S^2))