簡體   English   中英

將分組的行轉換為 r 中的從到列

[英]transpose grouped rows into from-to columns in r

我有一個數據集,我想將這些分組的行轉換為列並計算距離。

假設我有一個如下所示的數據集,其中“訂單”列僅在組內相關,並且有多種 mod,一組僅使用一個 mod。 當然 dataframe 有更多的組行。

第 1 組 命令 Area_id 開始日期 結束日期 模組 區域名稱 緯度
一個 1 0001 2022-01-01 2022-01-02 trk 加利福尼亞 36.778261 -119.4179324
一個 2 0002 2022-01-04 2022-01-07 trk 加利福尼 36.778262 -119.4179325
一個 3 0003 2022-01-10 2022-01-12 trk 加州 36.778264 -119.4179329
一個 4 0004 2022-01-16 2022-01-20 trk 加州 36.778265 -119.4179330
1 0012 2022-02-11 2022-02-12 公共汽車 巴塞羅那 41.385063 2.1734036
2 0013 2022-02-14 2022-02-18 公共汽車 巴塞羅那b 41.385064 2.1734037
C 1 0020 2022-01-27 2022-01-29 奧克蘭 37.8043237 -122.2711133
C 2 0012 2022-02-02 2022-02-04 巴塞羅那 41.385063 2.1734036
C 3 0009 2022-02-07 2022-02-10 奧克蘭 37.8043637 -122.2711237

...我想像下面這樣轉換這些 dataframe。 其中“距離”列是“From_area”和“To_area”之間的距離。 能否請你幫忙?

團體 From_area_id To_area_id From_area To_area 開始日期 結束日期 模組 距離
一個 0001 0002 加利福尼亞 加利福尼 2022-01-02 2022-01-04 trk
一個 0002 0003 加利福尼 加州 2022-01-07 2022-01-10 trk
一個 0003 0004 加州 加州 2022-01-12 2022-01-16 trk
0012 0013 巴塞羅那 巴塞羅那b 2022-02-12 2022-02-14 公共汽車
C 0020 0012 奧克蘭 巴塞羅那 2022-01-29 2022-02-02
C 0012 0009 巴塞羅那 奧克蘭 2022-02-04 2022-02-07

像這樣的東西:

library(dplyr)

library(geosphere)

df %>% 
  group_by(Group1) %>% 
  mutate(Area_id = str_pad(as.character(Area_id), 4, pad="0")) %>%
  mutate(To_area_id = lead(Area_id), .after="Area_id") %>% 
  mutate(To_area = lead(Area_name), .after="Area_name") %>% 
  mutate(across(c(lat, long), ~lead(.), .names = "To_{.col}")) %>% 
  na.omit() %>% 
  rename(From_area_id = Area_id, From_area = Area_name, From_lat=lat, From_long = long) %>% 
  rowwise() %>% 
  mutate(Distance = distHaversine(c(From_long, From_lat), 
                                  c(To_long, To_lat)), .keep="unused")
  Group1 order From_area_id To_area_id start_date end_date   mod   From_area  To_area       Distance
  <chr>  <int> <chr>        <chr>      <chr>      <chr>      <chr> <chr>      <chr>            <dbl>
1 A          1 0001         0002       2022-01-01 2022-01-02 trk   California Californib       0.112
2 A          2 0002         0003       2022-01-04 2022-01-07 trk   Californib Californic       0.225
3 A          3 0003         0004       2022-01-10 2022-01-12 trk   Californic Californid       0.112
4 B          1 0012         0013       2022-02-11 2022-02-12 bus   Barcelona  Barcelonb        0.112
5 C          1 0020         0012       2022-01-27 2022-01-29 car   oaklanda   Barcelona  9572260.   
6 C          2 0012         0009       2022-02-02 2022-02-04 car   Barcelona  oaklandc   9572257.  

暫無
暫無

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

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