计算向量之间的eucledian距离

时间:2018-01-06 16:22:13

标签: r csv

我不明白dist()函数如何工作来计算两个向量之间的欧氏距离。我创建了最简单的一维向量,我想对我得到的结果进行解释。这是一个名为test.csv的CSV文件向量:

<?php if($skillArray['0']): ?>
<p><?php echo ucwords($skillArray['0']); ?></p>
<?php endif; ?>

<?php if($skillArray['1']): ?>
<p><?php echo ucwords($skillArray['1']); ?></p>
<?php endif; ?>

以下是代码:

Item Name   Attribute
Item 1      3
Item 2      5

以下是我得到的输出:

test <- read.csv("test.csv", header = TRUE)
dist(test, method = "euclidean")

R的版本是:Rx64 3.4.3

我希望结果为2而不是2.828427因为我假设欧氏距离是用公式计算的:dist(test, method = "euclidean") 1 2 2.828427 Warning message: In dist(test, method = "euclidean") : NAs introduced by coercion

将test.csv文件中的数字替换为我得到的公式:

d = sqrt((xi - yi)^2)

1 个答案:

答案 0 :(得分:0)

当您传递矩阵时,它会将您的输入视为nm维向量,请参阅:

dist(t(df[,c("Name","Attribute")])) # distance between the two columns
dist(df[,c("Name","Attribute")]) # distance between the two rows

sqrt((1-3)^2 + (2-5)^2) # distance between the two columns
sqrt((1-2)^2 + (3-5)^2) # distance between the two rows

我认为这可以满足您的需求:

apply(df[,c("Name","Attribute")],1, function(x) {abs(x[1]-x[2])})