楼主: windsgone
41721 12

[问答] R中如何实现欧氏距离、马氏距离的计算,还有夹角余弦(Cosine)的命令 [推广有奖]

  • 1关注
  • 0粉丝

已卖:28份资源

高中生

10%

还不是VIP/贵宾

-

威望
0
论坛币
28 个
通用积分
1.0000
学术水平
0 点
热心指数
0 点
信用等级
0 点
经验
360 点
帖子
24
精华
0
在线时间
13 小时
注册时间
2012-7-7
最后登录
2017-6-30

楼主
windsgone 发表于 2013-4-7 09:07:12 |AI写论文

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

求职就业群
赵安豆老师微信:zhaoandou666

经管之家联合CDA

送您一个全额奖学金名额~ !

感谢您参与论坛问题回答

经管之家送您两个论坛币!

+2 论坛币
如何计算每列间的距离,假如计算第一列与其他列之间的距离,并求出距离最小的那一组,在R中能否实现欧氏距离和马氏距离的计算?请求解答。



二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

关键词:欧氏距离 如何实现 马氏距离 cos OSI 计算 如何

数据形式.jpg (299.45 KB)

数据形式.jpg

R1.xls
下载链接: https://bbs.pinggu.org/a-1302224.html

133.5 KB

data

回帖推荐

求证1加1 发表于3楼  查看完整内容

在R中计算距离的函数为dist(),比较直接的用法是dist(x,method="euclidean")即为计算欧式距离,其余可选的参数还有"maximum", "manhattan", "canberra", "binary" ,"minkowski",lz调整这个参数就能得到lz要的距离 希望对你有用

沙发
IntheRed 发表于 2013-4-7 09:20:40
Euclidian distance:  try function dist(...),
Mahalanobis distance: try function mahalanobis(...),
both in package {stats}
已有 1 人评分学术水平 热心指数 信用等级 收起 理由
windsgone + 1 + 1 + 1 分析的有道理,怎么不能重复加分?

总评分: 学术水平 + 1  热心指数 + 1  信用等级 + 1   查看全部评分

藤椅
求证1加1 发表于 2013-4-7 09:22:28
在R中计算距离的函数为dist(),比较直接的用法是dist(x,method="euclidean")即为计算欧式距离,其余可选的参数还有"maximum", "manhattan", "canberra", "binary" ,"minkowski",lz调整这个参数就能得到lz要的距离
希望对你有用
已有 1 人评分学术水平 热心指数 信用等级 收起 理由
windsgone + 2 + 2 + 2 我很赞同

总评分: 学术水平 + 2  热心指数 + 2  信用等级 + 2   查看全部评分

个人主页,欢迎订阅http://chenangliu.info/

板凳
windsgone 发表于 2013-4-7 09:23:35
IntheRed 发表于 2013-4-7 09:20
Euclidian distance:  try function dist(...),
Mahalanobis distance: try function mahalanobis(...), ...
非常感谢,可以实现批量计算吗?比如我有两个数据集(一大一小),如何进行两组数据间单个数据的匹配度

报纸
windsgone 发表于 2013-4-7 09:28:01
求证1加1 发表于 2013-4-7 09:22
在R中计算距离的函数为dist(),比较直接的用法是dist(x,method="euclidean")即为计算欧式距离,其余可选的参 ...
谢谢指教,刚开始上手R,且急需分析数据,不懂得地方还望解疑!

地板
IntheRed 发表于 2013-4-7 09:28:46
windsgone 发表于 2013-4-7 09:23
非常感谢,可以实现批量计算吗?比如我有两个数据集(一大一小),如何进行两组数据间单个数据的匹配度
我没仔细看,但是默认input data是data.frame,所以,只要把数据组织成matrix或data.frame,函数应该自动计算返回一组结果,包含每两列之间的距离,给你。help应该写的很全的。
已有 1 人评分学术水平 热心指数 信用等级 收起 理由
windsgone + 1 + 1 + 1 分析的有道理

总评分: 学术水平 + 1  热心指数 + 1  信用等级 + 1   查看全部评分

7
windsgone 发表于 2013-4-7 09:30:46
IntheRed 发表于 2013-4-7 09:28
我没仔细看,但是默认input data是data.frame,所以,只要把数据组织成matrix或data.frame,函数应该自动 ...
action,我先尝试!!

8
IntheRed 发表于 2013-4-7 09:42:40
windsgone 发表于 2013-4-7 09:30
action,我先尝试!!
autobots, lets roll out.
已有 1 人评分学术水平 热心指数 信用等级 收起 理由
windsgone + 1 + 1 + 1 鼓励积极发帖讨论

总评分: 学术水平 + 1  热心指数 + 1  信用等级 + 1   查看全部评分

9
windsgone 发表于 2013-4-7 12:38:39
只需一个样本与其他样本进行计算,而不是两两计算,可否实现?

10
IntheRed 发表于 2013-4-8 00:09:43
windsgone 发表于 2013-4-7 12:38
只需一个样本与其他样本进行计算,而不是两两计算,可否实现?
一样的啊。就用dist,返回的是个dist object,可以变成matrix,从里面读出需要的那个样本和其他所有的样本的距离。

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就好了。
已有 1 人评分学术水平 热心指数 信用等级 收起 理由
windsgone + 1 + 1 + 1 观点有启发

总评分: 学术水平 + 1  热心指数 + 1  信用等级 + 1   查看全部评分

您需要登录后才可以回帖 登录 | 我要注册

本版微信群
加好友,备注cda
拉您进交流群
GMT+8, 2026-2-8 13:20