【问题标题】:Permutation of euclidean distances between 13 row indexes in RR中13个行索引之间欧几里得距离的排列
【发布时间】:2019-12-01 08:55:58
【问题描述】:

我有 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

【问题讨论】:

    标签: r dplyr max permutation euclidean-distance


    【解决方案1】:

    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 
    

    中的类似方法

    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]
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-01-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-01-23
      • 2011-09-05
      • 2023-03-12
      相关资源
      最近更新 更多