【发布时间】:2018-09-29 17:53:32
【问题描述】:
我有一个大的坐标数据集,我想计算它们之间的欧几里得距离。示例如下:
df <- data.frame("name" = c("a","b","c","a","e"), "type" = c("me","me","me","we", "we"),
"x" = c(64.044,63.722,64.359,65.373, 65.122),"y" = c(51.615,52.849,53.119,51.805,52.78),
"z" = c(33.423,32.671,31.662,34.158,35.26))
name type x y z a me 64.044 51.615 33.423 b me 63.722 52.849 32.671 c me 64.359 53.119 31.662 d we 65.373 51.805 34.158 e we 65.122 52.78 35.26
我想计算具有不同类型的名称列值的行之间的欧几里得距离值。我写了这段代码
require("distances")
for (i in 1:nrow(df)) {
if(!(df$type[i]%in%df$type[i+1])){
d <- distances(df[,3:5])
}
}
然而这是错误的。我的理想结果应该如下所示,其中 d 说明了名称值之间的距离:
a.me b.me c.me a.we e.we
a.me 0 0 0 d d
b.me 0 0 0 d d
c.me 0 0 0 d d
a.we d d d 0 0
e.we d d d 0 0
此外,我的数据集变化很大,我认为 for 不是最佳选择。任何人都可以在这个问题上帮助我吗?
【问题讨论】:
-
这是你想要的吗:
dist(df[3:5], diag = TRUE, upper = TRUE)? -
@RuiBarradas 不,我使用了“距离”包中的距离函数。
标签: r for-loop dataframe euclidean-distance