我正在开发一个名为dbus
的数据框,用于描述某些时间段内公共巴士的固定路由。数据帧的一小部分如下所示。此数据框的含义非常简单:列Stop.Name标记总线将访问的所有公共汽车站,其顺序与特定日期期间数据集中显示的顺序相同。
Date DOW Trip.Time Stop.Name
<chr> <chr> <chr> <chr>
1 01-OCT-2016 Saturday 05:55 Davis CTA St
2 01-OCT-2016 Saturday 05:55 Benson / Davis
3 01-OCT-2016 Saturday 05:55 Davis / Maple
4 01-OCT-2016 Saturday 05:55 Davis / Oak
5 01-OCT-2016 Saturday 05:55 Davis Ridge
6 01-OCT-2016 Saturday 05:55 Davis Asbury
7 02-OCT-2016 Sunday 05:55 Asbury Church
8 02-OCT-2016 Sunday 05:55 Church Wesley
9 02-OCT-2016 Sunday 05:55 Church Ashla
10 02-OCT-2016 Sunday 05:55 Church Florence
11 02-OCT-2016 Sunday 06:55 Church Britt
12 02-OCT-2016 Sunday 06:55 Asbury Road
13 02-OCT-2016 Sunday 06:55 Church Wesley
14 02-OCT-2016 Sunday 06:55 Bryan St
15 02-OCT-2016 Sunday 05:55 Church Florence
16 02-OCT-2016 Sunday 05:55 Church Ashla
我的目标:写一个 R代码来重新构建路由矩阵A,最好只基于一列:stop.name(所以,忽略其余列)。路由矩阵A =(a_ {ij})(i,j是停靠点的索引)将包含1和0的条目,但基于以下规则:
我的启发式算法:首先,我创建一个零行数矩阵A,其中行x列=(2 *停止数)x(所有连接的唯一对停止)(对于上面的数据集,我有78个可能的对中有13个唯一停止和63个连接对。我只能想出主要通过连接对的数量仅检查)。所以A的大小 26 * 63 。现在,对于A的每一行,我想根据规则2将相应的条目更改为1.预期的输出将是
A = [1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 0 0 0 0.... 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.... 0 ----> All zeros since the
bus does not go INTO Davis CTA St
0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1.... 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0...1 1]` ---> Last 5 entries =
1s since the bus goes from Church Florence to Church Ashla, which is
connected to 4 other bus stops
其中列 1 - &gt; 63 是(间接/直接)连接的公共汽车站的集合:{Davis CTA St - &gt; Benson / Davis,Davis CTA St - &gt; Davis Maple,Davis CTA St - &gt;戴维斯/橡树,...,佛罗伦萨教堂 - &gt; Ashbury Road}。行1 - >; 26将被标记为Davis CTA St_ON,Davis CTA St_Off,Benson / Davis ON,Benson / Davis OFF,......,Bryan St OFF。
请注意,查看上面的路由矩阵A,规则2&amp; 4 可以编码为以下规则:如果连接了停止i和j,并且连接了停止j和k,则我连接到j。这意味着对于行i_IN
,如果条目对应于列ij
且jk
为1,则列ik
中的条目= 1(因此,{{1}这里的陈述就够了)。这意味着要有效地填写每一行,我们必须首先获得一组直接连接,唯一对的公交车站。然后,使用上面的IF
语句从另一组中获取间接连接的对的集合。一旦我们获得这两个集合,对于每个IF
或i_IN
行,我们只检查这两个集合中的一个(取决于IN或OUT行状态),并填写出现的每个列下的条目在该集合中1. i_OUT
或i_IN
行的其余条目保持为零。
我的问题:基于上面的启发式算法,我仍然在努力制作有效的代码。特别是,如何在R中编写有效的代码来执行以下任务:
i_OUT
的每一行,记录所有直接连接的,唯一的对停靠点(因此,不允许对重复)。鉴于所有信息,有人可以帮助我完成上述任何任务,即使只是上面的数据框架吗?我被困在任务1上,因为我看不出如何防止重复发生; p任务2很难,因为Stop.Name
循环需要永远。没有那些2,任务3是不可能解决的; p