如何计算每列间的距离,假如计算第一列与其他列之间的距离,并求出距离最小的那一组,在R中能否实现欧氏距离和马氏距离的计算?请求解答。
在R中计算距离的函数为dist(),比较直接的用法是dist(x,method="euclidean")即为计算欧式距离,其余可选的参数还有"maximum", "manhattan", "canberra", "binary" ,"minkowski",lz调整这个参数就能得到lz要的距离。
sample code:
data=read.csv(file="E:\\R1.csv",header=T,row.names=1)
mdist=as.matrix(dist(data))
mvec=mdist["504",]
说明:
R最好读.csv文件,直接.xlsx文件经常有问题,所以我把你的excel xlsx转成csv了。dist默认就是算欧式距离,算完后得到一个所有距离的矩阵,假定你需要sample 504(即你的data中第一列编号504的)和其他所有sample的距离(包括和504自己),最后vector mvec中的结果就是需要的。如果你只需要504和其他所有sample的距离,想把和504自己的距离去掉,最后用:
mvec=mdist["504",-(row.names(mdist)=="504")]
马氏距离直接用mahalanobis(data,center=,cov=), 返回是一个vector,即对于每个sample X,计算
(X-mu)' S.inv (X-mu)
mu就是center或者“均值”,S即cov或者variance-covariance matrix,S.inv是S的逆。我不知道你要用神马center和cov,所以没写。如果你想算的是对于两个sample X,Y,马氏距离为:
(X-mu)' S.inv (Y-mu)
比如X固定为某个sample,Y应该变化为其他所有sample,要得到一系列的距离,这个也很容易,只要有mu和S,自己做matrix multiplication就好了。
暂无数据