我正在使用dplyr和扫帚为我的数据计算kmeans.我的数据包含X和Y坐标的测试和训练集,并按一些参数值(在本例中为lambda)分组:
mds.test = data.frame()
for(l in seq(0.1, 0.9, by=0.2)) {
new.dist <- run.distance.model(x, y, lambda=l)
mds <- preform.mds(new.dist, ndim=2)
mds.test <- rbind(mds.test, cbind(mds$space, design[,c(1,3,4,5)], lambda=rep(l, nrow(mds$space)), data="test"))
}
> head(mds.test)
Comp1 Comp2 Transcripts Genes Timepoint Run lambda data
7A_0_AAGCCTAGCGAC -0.06690476 -0.25519106 68125 9324 Day 0 7A 0.1 test
7A_0_AAATGACTGGCC -0.15292848 0.04310200 28443 6746 Day 0 7A 0.1 test
7A_0_CATCTCGTTCTA -0.12529445 0.13022908 27360 6318 Day 0 7A 0.1 test
7A_0_ACCGGCACATTC -0.33015913 0.14647857 23038 5709 Day 0 7A 0.1 test
7A_0_TATGTCGGAATG -0.25826098 …Run Code Online (Sandbox Code Playgroud) 我有一个主成分分析的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
Run Code Online (Sandbox Code Playgroud)
我最终希望以以下格式返回表:
A B ...
A 0 0.2 ...
B 0.2 0 ...
... ... ... ...
... ... ... ...
Run Code Online (Sandbox Code Playgroud)
显然,以上距离数据是伪造的。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
Run Code Online (Sandbox Code Playgroud)
我相信解决此问题的一种方法是创建一个函数来计算距离,并以成对的方式将其应用于每一行。我认为这是在三个维度上计算距离的正确函数。
euc.dist.3 <- function(x1, x2, y1, y2, z1, z2 ) sqrt( …Run Code Online (Sandbox Code Playgroud)