簡體   English   中英

計算 R 中坐標之間的距離

[英]Calculate distance between coordinates in R

我想計算我的數據幀的經緯度位置之間的距離(以米為單位),但有以下限制: 1.- 只有相同 CLIENTID 的經緯度,但它們之間的所有數據都是相同的。 2.- 為每個 CLIENTID 生成一個新的數據框(並導出到 CSV o XLS)

我的數據存儲為:

| CLIENT ID | HOUSE ID | LAT | LONG |
| 111111111 | xxx111   | xx.xx| xx.xx|
| 111111111 | xxx112   | xx.xx| xx.xx|
| 111111111 | xxx145   | xx.xx| xx.xx|
| 222222222 | xxx345   | xx.xx| xx.xx|
| 222222222 | xxx 666  | xx.xx| xx.xx|

我需要的:

以 CLIENTID (CLIENTID.csv) 命名的 CSV 或 XLS 文件,內容如下:

| CLIENT ID | HOUSE ID1 | HOUSE ID 2| DISTANCE |
| 111111111 | xxx111    | xxx112    | 950      | 
| 111111111 | xxx111    | xxx145    | 750      |
| 111111111 | xxx112    | xxx145    | 250      |

我嘗試了一些鏈接,但我不知道如何解決它,因為我已經與計算機斷開連接了一年 (COVID)

鏈接:

使用R中的distm()計算數據幀中兩個GPS位置之間的距離

使用 R 計算兩點(緯度,經度)之間的地理空間距離的函數

編輯:添加數據

對不起,我的第一次寫作。 我完全被屏蔽了,我無法以適當的方式詢問。

我已經將兩個數據幀(leftjoin)組合起來以獲得帶有“Doc_titular”的 AAA_JOIN 數據幀

現在我的問題開始了:
1.- 從“Doc_titular”中過濾,並從同一個“Doc_titular”中獲取所有行
2.- 計算所有 LAT/LONG 之間的距離 3.- 將每個“Doc_titular”的數據存儲在 CSV 中,所有 HouseID 距離均采用上述格式(Doc_titular; HouseId; HouseId(n); Meters)

下面是一個數據示例:

Doc_titular House_ID    longitude   latitude
26DF5756F   AAA/BA/00145    -3.36715925514947   3.80089929185657
26DF5756F   AAA/BA/00146    -3.36687508416913   3.80092746460019
26DF5756F   AAA/BA/00733    -3.37604382639631   3.80126114282085
45GH7765B   AAA/BA/00123    -3.36887798896237   3.80405033823961
45GH7765B   AAA/BA/00498    -3.37077717656959   3.80121749925945
45GH7765B   AAA/BA/00998    -3.79037050320006   3.77633839304628
45GH7765B   AAA/BA/00332    -3.38064351196704   3.80099089206718
98TR2794P   AAA/BA/00420    -3.36824907065489   3.80086791973886
98TR2794P   AAA/BA/00557    -3.37255900917349   3.80107792023686
98TR2794P   AAA/BA/00556    -3.36674589155523   3.8012204114931
98TR2794P   AAA/BA/00040    -4.05181620512371   3.80137173136896

對不起,如果我發布一些基本的東西,但我不太擅長 R,而且今年我對計算機很遠。 提前致謝。

這是我使用purrrgeosphere::distm()解決方案:

library(purrr)

split(your_data, ~ Doc_titular) %>%
  map(~ pmap(.x, list)) %>%
  map_dfr(~ combn(.x, 2, simplify = F) %>% map_dfr(~ do.call(\(h1, h2) {
    c(House_ID_1 = h1$House_ID,
      House_ID_2 = h2$House_ID,
      Distance = geosphere::distm(c(h1$longitude, h1$latitude),
                                  c(h2$longitude, h2$latitude)))
  }, .x)))

返回:

# A tibble: 15 x 3
   House_ID_1   House_ID_2   Distance        
   <chr>        <chr>        <chr>           
 1 AAA/BA/00145 AAA/BA/00146 31.7180146462883
 2 AAA/BA/00145 AAA/BA/00733 987.675672076512
 3 AAA/BA/00146 AAA/BA/00733 1019.09764067029
 4 AAA/BA/00123 AAA/BA/00498 377.66269306226 
 5 AAA/BA/00123 AAA/BA/00998 46918.5688963262
 6 AAA/BA/00123 AAA/BA/00332 1349.94747698525
 7 AAA/BA/00498 AAA/BA/00998 46688.6347143115
 8 AAA/BA/00498 AAA/BA/00332 1096.20190700286
 9 AAA/BA/00998 AAA/BA/00332 45593.1545475677
10 AAA/BA/00420 AAA/BA/00557 479.294723110493
11 AAA/BA/00420 AAA/BA/00556 171.456842525277
12 AAA/BA/00420 AAA/BA/00040 75928.0863123282
13 AAA/BA/00557 AAA/BA/00556 645.89145220337 
14 AAA/BA/00557 AAA/BA/00040 75449.3320106569
15 AAA/BA/00556 AAA/BA/00040 76095.0197361047

(使用的數據:)

your_data <- structure(list(Doc_titular = c("26DF5756F", "26DF5756F", "26DF5756F", "45GH7765B", "45GH7765B", "45GH7765B", "45GH7765B", "98TR2794P", "98TR2794P", "98TR2794P", "98TR2794P"), House_ID = c("AAA/BA/00145", "AAA/BA/00146", "AAA/BA/00733", "AAA/BA/00123", "AAA/BA/00498", "AAA/BA/00998", "AAA/BA/00332", "AAA/BA/00420", "AAA/BA/00557", "AAA/BA/00556", "AAA/BA/00040"), longitude = c(-3.36715925514947, -3.36687508416913, -3.37604382639631, -3.36887798896237, -3.37077717656959, -3.79037050320006, -3.38064351196704, -3.36824907065489, -3.37255900917349, -3.36674589155523, -4.05181620512371), latitude = c(3.80089929185657, 3.80092746460019, 3.80126114282085, 3.80405033823961, 3.80121749925945, 3.77633839304628, 3.80099089206718, 3.80086791973886, 3.80107792023686, 3.8012204114931, 3.80137173136896)), row.names = c(NA, -11L), class = c("tbl_df", "tbl", "data.frame"))

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM