2017-07-15 144 views
0

我有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点。我试着修改它通过分组,并使用语句,并聚合....

任何想法?

回答

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呼叫的数量。