【问题标题】:Min, max, mean distance between points by groups/counties最小,最大,按组/县的点之间的平均距离
【发布时间】:2017-07-15 23:17:45
【问题描述】:

我有 x,y 坐标和每个坐标所在的“组”(县)。对于每个县,我想知道县内各点之间的最小、最大和平均距离。然后我想用其县的最小、最大、平均距离标记每个点。获得所有 obs 的最小、最大和平均距离很容易——但我不知道如何按县获得它。这是我用来测试 min 的内容:

county <- as.integer(c(1, 1, 1, 2, 2, 2))
x <- c(1.0, 2.0, 5.0, 10., 20., 50.)
y <- c(1.0, 3.0, 4.0, 10., 30., 40.)
xy <- data.frame(county,x,y)
xy$mindist <- min(dist(cbind(xy$x, xy$y)))

县 1 的最小值、最大值和平均值分别为 2.2、5 和 3.5。 县 2 的最小值、最大值和平均值分别为 22.4、50 和 34.7。 上面的代码用全局最小值 (2.2) 标记每个点,而不是用 2.2 标记所有计数 1 点,用 22.4 标记所有县 2 点。我尝试通过分组、使用 by 语句和聚合来修改它......

有什么想法吗?

【问题讨论】:

    标签: r distance


    【解决方案1】:

    您可以使用dplyr 包轻松进行分组计算。一种方法是执行以下操作

    xy %>% group_by(county) %>% 
           summarise(mind = min(dist(cbind(x,y))), 
                     meand = mean(dist(cbind(x,y))), 
                     maxd= max(dist(cbind(x,y))))
    

    产生

    # A tibble: 2 x 4
      county      mind     meand  maxd
       <int>     <dbl>     <dbl> <dbl>
    1      1  2.236068  3.466115     5
    2      2 22.360680 34.661152    50
    

    您也可以先将数据收集在一起,以减少 cbind 调用的次数。

    【讨论】:

      猜你喜欢
      • 2014-03-31
      • 2021-10-24
      • 1970-01-01
      • 1970-01-01
      • 2021-03-03
      • 2022-06-17
      • 2020-06-18
      • 1970-01-01
      • 2015-01-07
      相关资源
      最近更新 更多