【发布时间】:2020-09-02 12:27:43
【问题描述】:
我有一个不同组中的点数据框。我的实际数据框长度超过一千行。对于每个组的组合,我需要找到组合中每个点与其他点之间的距离。我总结了每个点的距离。我有一个解决方案,但是当我处理 63 种组合时速度很慢。
为了说明我当前的解决方案,请考虑我只有三个组的示例。我将它们分类为所有可能的组合,即组合 1 仅包含第 1 组,组合 4 包含第 1 组和第 2 组....(以下可重复数据)
然后我将我的数据框转换为点的 shapefile:
points <- points_csv %>%st_as_sf(coords = c('longitude', 'latitude'))
然后我制作不同组合的向量:
Combination_list = points$combination
Combination_list <- unique(Combination_list)
并使用以下循环:
Density_total = data.frame()
for (b in Combination_list){
filtered <- filter(points, combination == b)
x <- filtered$geometry
for (t in filtered$geometry){
test_point <- filtered$geometry[t]
M <- st_distance(test_point,x)
M <- unclass(M)
D <- sum(M)
df1 <- data.frame(D)
Density_total <- rbind(Density_total,df1)
}}
可重现的数据:
structure(list(Name = c("Group1", "Group1", "Group2", "Group3",
"Group1", "Group1", "Group2", "Group1", "Group1", "Group3", "Group2",
"Group3", "Group1", "Group2", "Group3"), combination = c("Combination1",
"Combination1", "Combination2", "Combination3", "Combination4",
"Combination4", "Combination4", "Combination5", "Combination5",
"Combination5", "Combination6", "Combination6", "Combination7",
"Combination7", "Combination7"), latitude = c(0.1989, 0.1989,
0.201, 0.201, 0.1989, 0.1989, 0.201, 0.1989, 0.1989, 0.201, 0.201,
0.201, 0.1989, 0.201, 0.201), longitude = c(-0.001, -0.0015,
-0.0015, -0.001, -0.001, -0.0015, -0.0015, -0.001, -0.0015, -0.001,
-0.0015, -0.001, -0.0015, -0.0015, -0.001)), class = "data.frame", row.names = c(NA,
-15L), spec = structure(list(cols = list(Name = structure(list(), class =
c("collector_character",
"collector")), combination = structure(list(), class = c("collector_character",
"collector")), latitude = structure(list(), class = c("collector_double",
"collector")), longitude = structure(list(), class = c("collector_double",
"collector"))), default = structure(list(), class = c("collector_guess",
"collector")), skip = 1), class = "col_spec"))
所需的输出应如下所示:
Distance X Y Combination
0.000500000 0.1989 -0.0010 Combination1
0.000500000 0.1989 -0.0015 Combination1
0.000000000 0.2010 -0.0015 Combination2
0.000000000 0.2010 -0.0010 Combination3
0.002658703 0.1989 -0.0010 Combination4
0.002600000 0.1989 -0.0015 Combination4
0.004258703 0.2010 -0.0015 Combination4
0.002600000 0.1989 -0.0010 Combination5
0.002658703 0.1989 -0.0015 Combination5
0.004258703 0.2010 -0.0010 Combination5
0.000500000 0.2010 -0.0015 Combination6
0.000500000 0.2010 -0.0010 Combination6
0.004758703 0.1989 -0.0010 Combination7
0.004758703 0.1989 -0.0015 Combination7
0.004758703 0.2010 -0.0015 Combination7
0.004758703 0.2010 -0.0010 Combination7
【问题讨论】:
-
您能包含所需的输出吗?
标签: r loops combinations distance shapefile