簡體   English   中英

從 DF 在 R 中制作 O/D 表

[英]Make an O/D table in R from a DF

各位晚上好。 我在創建基於我的 DF 的 O/D 時遇到了一些麻煩。 我的 DF 有行程編號、每個站點的索引、每個站點的出發時間和站點名稱:

Trip Index Time OD
16   1     a    A
16   10    b    B
16   20    c    C
32   1     d    B
32   9     e    A
32   13    f    C
32   24    g    D

我需要有 O/D 表,其中有 Origin 的站點名稱 | 目的地的站點名稱 | 每個連接的出發時間(DF 中的時間):

O D Time
A B a
A C a
B C b
B A d
B C d
B D d
A C e
A D e
C D f

以第一次旅行為例。 它從“A”站開始,到經過“B”站的客棧“C”站結束。 因此,對於“A”中的乘客,他們在“a”時間開始前往“B”的旅程,並在“a”時間開始前往“C”的旅程。 對於“B”中的乘客,他們在“b”時間開始前往“C”的旅程。 從“C”開始,這次旅行你不能 go 無處可去。 然后我們必須看到下一次旅行。 等等。

我已經開始嘗試使用“for”循環,如果在 for 內有 else 開始比較第一次行程的第一行與第二次和第三次,然后將第一次行程的第二行與第三次進行比較,而不是傳遞到下一個旅行,因為沒有第四站。 至少這是我的理由,不知道是否清楚,甚至是否有意義。

謝謝!

試試這個,用一個簡單的輔助函數:

library(dplyr)
odfunc <- function(tm, od) {
  mtx <- t(combn(length(od), 2))
  tibble::tibble(O = od[mtx[,1]], D = od[mtx[,2]], Time = tm[mtx[,1]])
}

df %>%
  group_by(Trip) %>%
  do(with(., odfunc(Time, OD))) %>%
  ungroup()
# # A tibble: 9 x 4
#    Trip O     D     Time 
#   <int> <chr> <chr> <chr>
# 1    16 A     B     a    
# 2    16 A     C     a    
# 3    16 B     C     b    
# 4    32 B     A     d    
# 5    32 B     C     d    
# 6    32 B     D     d    
# 7    32 A     C     e    
# 8    32 A     D     e    
# 9    32 C     D     f    

數據:

df <- read.table(header=TRUE, text="
Trip Index Time OD
16   1     a    A
16   10    b    B
16   20    c    C
32   1     d    B
32   9     e    A
32   13    f    C
32   24    g    D")

暫無
暫無

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

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