dplyr [R]

时间:2018-07-13 02:51:36

标签: r matrix dplyr data-conversion

我有一个列表,其中包含number of trips (trip)Origin (O)的{​​{1}},如下所示:

Destination (D)

现在,我正在尝试结合O-D和D-O对的行程次数。例如,df <- data.frame(O=c(1,2,4,4,4,6,6,6,7,7,7,9,9,9,9,10,10,10,11,12,12,12,32,86,108,128,128,157,157,157,157,157), D=c(2,1,6,7,32,4,7,157,4,6,157,10,11,12,157,9,12,157,9,9,10,157,4,128,128,86,108,6,7,9,10,12), trip=c(971,971,416,621,330,416,620,1134,621,620,625,675,675,378,439,675,724,472,675,378,724,563,330,610,405,610,405,1134,625,439,472,563) ) O=10,D=23,trip=20之间的行程被合并为O=23,D=10,trip=10

因此,当前df:

O=10,D=23,trip=30

将转换为:

> df
     O   D trip
1    1   2  971
2    2   1  971
3    4   6  416
4    4   7  621
5    4  32  330
6    6   4  416
7    6   7  620
8    6 157 1134
9    7   4  621
10   7   6  620
11   7 157  625
12   9  10  675
13   9  11  675
14   9  12  378
15   9 157  439
16  10   9  675
17  10  12  724
18  10 157  472
19  11   9  675
20  12   9  378
21  12  10  724
22  12 157  563
23  32   4  330
24  86 128  610
25 108 128  405
26 128  86  610
27 128 108  405
28 157   6 1134
29 157   7  625
30 157   9  439
31 157  10  472
32 157  12  563

某些条件可能会影响操作:

  • 有些记录在两个方向上没有对。
    *例如,在> df O D trip 1 1 2 1941 3 4 6 832 4 4 7 1241 5 4 32 330 7 6 7 1240 8 6 157 2268 11 7 157 1250 12 9 10 675 13 9 11 675 14 9 12 378 15 9 157 878 16 10 9 675 17 10 12 724 18 10 157 944 19 11 9 675 20 12 9 378 21 12 10 724 22 12 157 1126 23 32 4 330 24 86 128 1220 25 108 128 810 中,df没有相反的指令O=108,D=128。它只是在输出中保持不变。
  • 在一对OD中,应保留编号较小的O=128,D=100 O
    *例如,在成对的OO=10,D=100中,应保留前者,而应删除后者,并将那些O=100,D=10组合在一起

我当时想让所有对保持可变,并逐条记录对其进行比较,以确定是否有必要进行整合,但是这种操作可能会花费很长时间,并且最多覆盖360,000对时效率不高。

您有什么建议吗? 另一个问题的建议答案使用tripdata.tableigraph,但我更喜欢使用stats / dplyr进行管道操作。

0 个答案:

没有答案