簡體   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