繁体   English   中英

计算R中两个不同数据集中XY坐标之间的距离

[英]Calculate distances between XY coordinates in two different datasets in R

考虑我们有两个不同的数据集:

X1 = c(1,2,4,5,1,3,1)
Y1 = c(3,5,6,3,1,5,1)
df1= data.frame(X1,Y1)

X2 = c(2,3,4,3,2,3,2)
Y2 = c(3,4,2,6,4,3,4)
df2= data.frame(X2,Y2)

这些数据在此散点图中表示: 在此处输入图片说明

我想计算df1中的7个XY坐标(黑色空心点)和df2中的7个XY坐标(红色空心三角形)之间的距离。

我知道如何使用dist()和cbind()计算数据集中 XY坐标之间的距离。 但是我不知道如何做,但是要在两个不同的数据集中使用XY坐标。

使用两个数据集,我们将获得一个由7列7行组成的表格,并由所有这些坐标之间的距离填充。 列名称将是df1中的坐标,行名称将是df2中的坐标。

我如何才能获得所有

也许这种策略可能会有所帮助

X1 = c(1,2,4,5,1,3,1)
Y1 = c(3,5,6,3,1,5,1)
df1= data.frame(X1,Y1) 

X2 = c(2,3,4,3,2,3,2)
Y2 = c(3,4,2,6,4,3,4)
df2= data.frame(X2,Y2)

library(tidyverse)

df1 = df1 %>% mutate(df_type = "data1") %>% select(X = X1, Y = Y1)

df2 = df2 %>% mutate(df_type = "data2")  %>% select(X = X2, Y = Y2)

# link data frames by row
df = bind_rows(df1, df2)

dist(cbind(df$X,df$Y))

   1        2        3        4        5        6        7        8        9       10       11       12       13
2  2.236068                                                                                                            
3  4.242641 2.236068                                                                                                   
4  4.000000 3.605551 3.162278                                                                                          
5  2.000000 4.123106 5.830952 4.472136                                                                                 
6  2.828427 1.000000 1.414214 2.828427 4.472136                                                                        
7  2.000000 4.123106 5.830952 4.472136 0.000000 4.472136                                                               
8  1.000000 2.000000 3.605551 3.000000 2.236068 2.236068 2.236068                                                      
9  2.236068 1.414214 2.236068 2.236068 3.605551 1.000000 3.605551 1.414214                                             
10 3.162278 3.605551 4.000000 1.414214 3.162278 3.162278 3.162278 2.236068 2.236068                                    
11 3.605551 1.414214 1.000000 3.605551 5.385165 1.000000 5.385165 3.162278 2.000000 4.123106                           
12 1.414214 1.000000 2.828427 3.162278 3.162278 1.414214 3.162278 1.000000 1.000000 2.828427 2.236068                  
13 2.000000 2.236068 3.162278 2.000000 2.828427 2.000000 2.828427 1.000000 1.000000 1.414214 3.000000 1.414214         
14 1.414214 1.000000 2.828427 3.162278 3.162278 1.414214 3.162278 1.000000 1.000000 2.828427 2.236068 0.000000 1.414214

然后您可以创建一个X和Y之间的距离的data.frame。首先,我们需要将dist对象转换为一个数据帧

df_dist = data.frame(as.matrix(dist(cbind(df$X,df$Y))))

进行一些操作,就有可能使X和Y之间保持距离

df_dist_x = df_dist %>% select(X1:X7) %>%
  mutate(row.1 = 1:nrow(df_dist)) %>% 
  filter(row.1 >= 8) %>%
  mutate(Y = paste0("Y",row_number())) %>%
  gather(X, distance, X1:X7) %>% 
  select(X, Y, distance)

head(df_dist_x)
   X  Y distance
1 X1 Y1 1.000000
2 X1 Y2 2.236068
3 X1 Y3 3.162278
4 X1 Y4 3.605551
5 X1 Y5 1.414214
6 X1 Y6 2.000000

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM