'from'과 'to'는 다음 행의 값을 '현재'행까지 '이동'하여 생성 할 수 있습니다. 그리고 정지 정보가 단순히
에 합류 할 수
내가 예와 함께 설명하게, 지금 library(data.table)
## here I"m using Melbourne's GTFS ("http://transitfeeds.com/p/ptv/497/latest/download")
#dt_stop_times <- lst[[6]]$stop_times
#dt_stops <- lst[[7]]$stops
#setDT(dt_stop_times)
#setDT(dt_stops)
## join on whatever stop information you want
dt_stop_times <- dt_stop_times[ dt_stops, on = c("stop_id"), nomatch = 0]
## set the order of stops for each group (in this case, each group is a trip_id)
setorder(dt_stop_times, trip_id, stop_sequence)
## create a new column by shifting the stop_id of the following row up
dt_stop_times[, stop_id_to := shift(stop_id, type = "lead"), by = .(trip_id)]
## you will have NAs at this point because the last stop doesn't go anywhere.
## you can do the same operation on multiple columns at the same time
dt_stop_times[, `:=`(stop_id_to = shift(stop_id, type = "lead"),
arrival_time_stop_to = shift(arrival_time, type = "lead"),
departure_time_stop_to = shift(departure_time, type = "lead")),
by = .(trip_id)]
## now you have your 'from' and 'to' columns from which you can make your igraph
## here's a subset of the result
dt_stop_times[, .(trip_id, stop_id, stop_name_from = stop_name, arrival_time, stop_id_to, arrival_time_stop_to)]
# trip_id stop_id stop_name_from arrival_time stop_id_to
# 1: 1.T0.3-86-A-mjp-1.7.R 4174 71-RMIT/Plenty Rd (Bundoora) 25:42:00 4485
# 2: 1.T0.3-86-A-mjp-1.7.R 4485 70-Janefield Dr/Plenty Rd (Bundoora) 25:43:00 4486
# 3: 1.T0.3-86-A-mjp-1.7.R 4486 69-Taunton Dr/Plenty Rd (Bundoora) 25:44:00 4487
# 4: 1.T0.3-86-A-mjp-1.7.R 4487 68-Greenhills Rd/Plenty Rd (Bundoora) 25:45:00 4488
# 5: 1.T0.3-86-A-mjp-1.7.R 4488 67-Bundoora Square SC/Plenty Rd (Bundoora) 25:46:00 4489
# ---
# 9415793: 9999.UQ.3-19-E-mjp-1.1.H 17871 7-Queen Victoria Market/Elizabeth St (Melbourne City) 23:25:00 17873
# 9415794: 9999.UQ.3-19-E-mjp-1.1.H 17873 5-Melbourne Central Station/Elizabeth St (Melbourne City) 23:27:00 17875
# 9415795: 9999.UQ.3-19-E-mjp-1.1.H 17875 3-Bourke Street Mall/Elizabeth St (Melbourne City) 23:30:00 17876
# 9415796: 9999.UQ.3-19-E-mjp-1.1.H 17876 2-Collins St/Elizabeth St (Melbourne City) 23:31:00 17877
# 9415797: 9999.UQ.3-19-E-mjp-1.1.H 17877 1-Flinders Street Railway Station/Elizabeth St (Melbourne City) 23:32:00 NA
# arrival_time_stop_to
# 1: 25:43:00
# 2: 25:44:00
# 3: 25:45:00
# 4: 25:46:00
# 5: 25:47:00
# ---
# 9415793: 23:27:00
# 9415794: 23:30:00
# 9415795: 23:31:00
# 9415796: 23:32:00
# 9415797: NA
의 사용 방금 필요 graph_from_data_frame{igraph}
사용하기에 :
# get a df with nodes
nodes <- dt_stops[, .(stop_id, stop_lon, stop_lat)]
# links beetween stops
links <- dt_stop_times[,.(stop_id, stop_id_to, trip_id)]
# create graph
g <- graph_from_data_frame(links , directed=TRUE, vertices=nodes)
마음 그러나 GTFS.zip
파일에는 두 개 이상의 전송 모드 (기차, 버스, 지하철 등)가있을 수 있으며 일부 스톱의 쌍은 서비스 빈도의 변화로 인해 다른 것보다 훨씬 높은 연결성을가집니다. GTFS.zip
에서 그래프를 작성할 때이 두 점을 어떻게 고려해야하는지 아직 명확하지 않습니다. 아마도 앞으로의 길은 빈도에 따라 각 에지에 가중치를 부여하고 상호 의존적 인 레이어로 간주되는 각 전송 모드에서 공통적으로 일부 중지를 갖는 다층 네트워크를 구축하는 것입니다.