从 DF 在 R 中创建 O/D 表

  • 本文关键字:创建 DF r transport od
  • 更新时间 :
  • 英文 :


大家晚上好。 我在根据我的 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 表,其中我有原点的停止名称 |目的地停靠点名称 |和每个连接的出发时间(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"开始,这次旅行无处可去。然后我们必须看到下一次旅行。等等。

我已经开始尝试使用"for"循环,如果在 for 内部开始将第一次旅行的第一行与第二行和第三行进行比较,然后是第一次旅行的第二行与第三次旅行,而不是传递到下一个行程,因为没有第四条腿。至少这是我的理由,不知道它是否清楚,甚至是否有意义。

谢谢!

试试这个,用一个简单的辅助函数:

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")

相关内容

  • 没有找到相关文章

最新更新