首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从DF生成R中的O/D表

从DF生成R中的O/D表
EN

Stack Overflow用户
提问于 2020-06-23 15:17:16
回答 1查看 65关注 0票数 0

大家晚上好。我有一些困难,创建一个基于我的DF的O/D。我的DF有行程的次数、每个站的索引、离开每个站的时间以及停站的名称:

代码语言:javascript
复制
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表,在这里,对于每个连接,我都有原产地的停止名-目的地的停止名

代码语言:javascript
复制
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“开始,到客栈的"C”站通过"B“站。因此,对于"A“的乘客来说,他们从"a”开始到"B“,而"a”则同时前往"C“。对于"B“中的乘客,他们在"b”时间开始前往"C“的旅程。从"C“开始,这次旅行你哪儿也不能去。那我们就得看下一次旅行了。诸若此类。

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

谢谢!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-06-23 21:45:09

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

代码语言:javascript
复制
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    

数据:

代码语言:javascript
复制
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")
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62538158

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档