1

我试图iris在 R 的数据集中找到不同物种之间的马氏距离。我能够通过以下代码找到之间setosa的距离:versicolor

library(HDMD)

#To get Mahalanobis distances between Setosa and Versicolor,
set.vers<-pairwise.mahalanobis(x=iris[1:100,1:4], grouping=iris[1:100,]$Species)
md= sqrt(set.vers$distance)

但是,我正在努力为setosaand做同样的事情virginica。我不确定如何选择数据集的前 50 行和后 50 行(即没有任何versicolor数据)

4

2 回答 2

2

这是一个基本的子集问题。您想要基于 的子集Species,类似于(未测试)

ss <- iris[iris$Species %in% c("Setosa", "Virginica"), ]
pairwise.mahalanobis(x = ss, grouping = ss$Species)

您当然可以通过多种方式更改要比较的物种对。

于 2020-09-24T09:40:54.503 回答
1

这是一种获取所有级别组合iris$Speciescombn计算马氏距离的方法。

library(HDMD)

inx <- sapply(levels(iris$Species), function(l) which(iris$Species == l), simplify = FALSE)
inx <- combn(inx, 2, function(x) unlist(x), simplify = FALSE)
set.vers_all <- lapply(inx, function(i) {
  pairwise.mahalanobis(x = iris[i, 1:4], grouping = droplevels(iris$Species[i]))
})
set.vers_all
于 2020-09-24T10:27:03.647 回答