R中13行索引之间欧氏距离的排列
Permutation of euclidean distances between 13 row indexes in R
我有 13 个兴趣区域 (AOI),每张测试图像都有 x 和 y 值。我怎样才能得到 AOI 对之间的欧几里得距离的所有可能组合,((x-xi)+(y-yi))^(1/2)?最终,我正在寻找每个测试图像的两个 AOI 之间所有可能距离的最大距离。
这可以不使用循环来完成吗?
> setwd("C:/Users/Data/Desktop")
> RawColor <- read.csv(file="13ptColor.csv")
> print(RawColor)
SN TestImage AOI x y
1 50293253 B 13 0.1597 0.06775
2 50293253 B 12 0.1587 0.06574
3 50293253 B 11 0.1596 0.06715
4 50293253 B 10 0.1594 0.06618
5 50293253 B 9 0.1590 0.06582
6 50293253 B 8 0.1593 0.06638
7 50293253 B 7 0.1589 0.06602
8 50293253 B 6 0.1594 0.06601
9 50293253 B 5 0.1591 0.06552
10 50293253 B 4 0.1587 0.06473
11 50293253 B 3 0.1593 0.06603
12 50293253 B 2 0.1585 0.06481
13 50293253 B 1 0.1588 0.06510
14 50293253 G 13 0.2985 0.60400
15 50293253 G 12 0.2977 0.60440
参见dist()
。由于没有提供足够的测试数据,这里以 iris
:
为例
as.matrix(
by(data = iris[, c('Sepal.Length', 'Sepal.Width')],
INDICES = iris[, 'Species', drop = F],
FUN = function(DF) max(dist(DF))
)
)
# [,1]
# setosa 2.418677
# versicolor 2.332381
# virginica 3.269557
# or
sp_DF <- split(x = iris[, c('Sepal.Length', 'Sepal.Width')],
f = iris[, 'Species', drop = F])
sapply(sp_DF, function(DF) max(dist(DF)))
# setosa versicolor virginica
# 2.418677 2.332381 3.269557
以及 dplyr
中的类似方法
library(dplyr)
iris%>%
group_by(Species)%>%
summarize(max_dist = max(dist(cbind(Sepal.Length, Sepal.Width))))
# A tibble: 3 x 2
Species max_dist
<fct> <dbl>
1 setosa 2.42
2 versicolor 2.33
3 virginica 3.27
library(data.table)
as.data.table(iris)[,
.(max_dist = max(dist(.SD))),
.SDcols = c('Sepal.Length', 'Sepal.Width'),
by = Species]
我有 13 个兴趣区域 (AOI),每张测试图像都有 x 和 y 值。我怎样才能得到 AOI 对之间的欧几里得距离的所有可能组合,((x-xi)+(y-yi))^(1/2)?最终,我正在寻找每个测试图像的两个 AOI 之间所有可能距离的最大距离。
这可以不使用循环来完成吗?
> setwd("C:/Users/Data/Desktop")
> RawColor <- read.csv(file="13ptColor.csv")
> print(RawColor)
SN TestImage AOI x y
1 50293253 B 13 0.1597 0.06775
2 50293253 B 12 0.1587 0.06574
3 50293253 B 11 0.1596 0.06715
4 50293253 B 10 0.1594 0.06618
5 50293253 B 9 0.1590 0.06582
6 50293253 B 8 0.1593 0.06638
7 50293253 B 7 0.1589 0.06602
8 50293253 B 6 0.1594 0.06601
9 50293253 B 5 0.1591 0.06552
10 50293253 B 4 0.1587 0.06473
11 50293253 B 3 0.1593 0.06603
12 50293253 B 2 0.1585 0.06481
13 50293253 B 1 0.1588 0.06510
14 50293253 G 13 0.2985 0.60400
15 50293253 G 12 0.2977 0.60440
参见dist()
。由于没有提供足够的测试数据,这里以 iris
:
as.matrix(
by(data = iris[, c('Sepal.Length', 'Sepal.Width')],
INDICES = iris[, 'Species', drop = F],
FUN = function(DF) max(dist(DF))
)
)
# [,1]
# setosa 2.418677
# versicolor 2.332381
# virginica 3.269557
# or
sp_DF <- split(x = iris[, c('Sepal.Length', 'Sepal.Width')],
f = iris[, 'Species', drop = F])
sapply(sp_DF, function(DF) max(dist(DF)))
# setosa versicolor virginica
# 2.418677 2.332381 3.269557
以及 dplyr
中的类似方法library(dplyr)
iris%>%
group_by(Species)%>%
summarize(max_dist = max(dist(cbind(Sepal.Length, Sepal.Width))))
# A tibble: 3 x 2
Species max_dist
<fct> <dbl>
1 setosa 2.42
2 versicolor 2.33
3 virginica 3.27
library(data.table)
as.data.table(iris)[,
.(max_dist = max(dist(.SD))),
.SDcols = c('Sepal.Length', 'Sepal.Width'),
by = Species]