R语言 如何计算组内所有可能的点组合之间的距离

tzxcd3kk  于 2023-04-18  发布在  其他
关注(0)|答案(1)|浏览(207)

我有一个有68个观测值的sf对象。在每个位置我有4个不同的点,具有不同的PointID(SchlagID),但具有相同的LocationID(FieldID)。我现在想计算每个位置之间的距离,每个位置总共有6个值(包括对角线距离,假设点在正方形中)
到目前为止,我已经能够计算4个值,但不知道如何计算对角线距离以及。
数据如下
下面是我正在编写的代码

pdist.df = data.frame(trapID=NA,LS=NA,dist=NA)
list.lsFeat = 1
counter=1

for(i in 1:nrow(raps_filtered_sf)){
    
  
  this.trap=raps_filtered_sf[i,]
  
  for(l in list.lsFeat){
    
    this.feat = raps_filtered_sf %>%
      filter(FieldID==this.trap$FieldID)
    
    #ind <- st_nearest_feature(this.trap, this.feat)
    dis <- st_distance(this.trap, this.feat)
    print(paste0("trap: ", this.trap$SchlagID, "//LS: ", this.feat$SchlagID, "//Dist: ", dis))
    
    pdist.df[counter,] = c(trapID=this.trap$SchlagID, LS=l, dist=dis)
    counter=counter+1
  }
}
wfveoks0

wfveoks01#

我相信你正在寻找一个sf::st_distance()调用。当用于单个sf Dataframe 时,它将输出一个距离矩阵。
对名称进行一点微调可以使其更容易解释,但并不是严格要求的。
举个例子,考虑这段代码,构建在3个半随机的北卡罗来纳州城市之上(因为我非常喜欢{sf}附带的nc.shp文件):

library(sf)
library(dplyr)

# 3 semi rancom cities in NC (because I *deeply love* the nc.shp file)
cities <- data.frame(name = c("Raleigh", "Greensboro", "Wilmington"),
                     x = c(-78.633333, -79.819444, -77.912222),
                     y = c(35.766667, 36.08, 34.223333)) %>% 
  st_as_sf(coords = c("x", "y"), crs = 4326)

# prepare a distance matrix
mtx <- st_distance(cities)

# give the rows & cols meaningful names
colnames(mtx) <- cities$name
rownames(mtx) <- cities$name  

# see my work, and find it good...
mtx

# Units: [m]
#             Raleigh Greensboro Wilmington
# Raleigh         0.0   112342.9   183751.2
# Greensboro 112342.9        0.0   269595.9
# Wilmington 183751.2   269595.9        0.0

相关问题