我有一个来自主成分分析的x,y和z坐标,我想计算一个欧几里得距离矩阵。从x,y,z坐标计算欧几里得距离矩阵
测试数据:
X Y Z
samp_A -0.003467119 -0.01422762 -0.0101960126
samp_B -0.007279433 0.01651597 0.0045558849
samp_C -0.005392258 0.02149997 0.0177409387
samp_D -0.017898802 0.02790659 0.0006487222
samp_E -0.013564214 0.01835688 0.0008102952
samp_F -0.013375397 0.02210725 -0.0286032185
我最终会喜欢下面的格式返回表:以上
A B ...
A 0 0.2 ...
B 0.2 0 ...
... ... ... ...
... ... ... ...
显然距离数据是假的。 X,Y和Z数据只是完整数据集的头部。完整的数据集包含大约4000个样本。我认为这需要做一个有效的方式。如果比较容易,那么计算最近的距离,比如说10分就足够了(剩下的点将是NA或者0)。
任何帮助将不胜感激!
编辑:建议使用dist
出现,但我不相信这允许三个坐标。如果我使用dist,结果似乎是无稽之谈(?)。
> pca_coords_dist <- dist(pca_coords)
> head(pca_coords_dist)
[1] 0.03431210 0.04539427 0.04583855 0.03584466 0.04191922 0.04291657
我相信去了解这一个方法是创建一个函数来计算距离,并将其应用到每一行成对方式。 I 认为这是计算三维距离的正确函数。
euc.dist.3 <- function(x1, x2, y1, y2, z1, z2) sqrt((x2 - x1)^2 + (y2 - y1)^2 + (z2 - z1)^2)
如果我将此应用于sampA和sampB,结果为1.56643。
现在,有没有办法将这个函数应用于每个成对的行?并将输出格式化为距离矩阵?
'dist'是你所需要的 –
这是我的理解是'dist'不使用三个坐标。我需要以成对的方式对每一行应用一个函数。 – user2117258
如果你为A和B做'euc.dist.3',它会给出0.0343121。做'euc.dist.3'(-0.003467119,-0.007279433,-0.01422762,0.01651597,-0.0101960126,0.0045558849)' –