Skip to content

Commit

Permalink
1st draft of new function merge_gtfs_feeds.R
Browse files Browse the repository at this point in the history
  • Loading branch information
rafapereirabr committed Apr 18, 2020
1 parent d07906c commit 55eda53
Show file tree
Hide file tree
Showing 5 changed files with 141 additions and 1 deletion.
2 changes: 1 addition & 1 deletion DESCRIPTION
Original file line number Diff line number Diff line change
Expand Up @@ -35,6 +35,6 @@ Imports:
utils,
raster,
pbapply
RoxygenNote: 7.0.2
RoxygenNote: 7.1.0
VignetteBuilder: knitr
LinkingTo: Rcpp
1 change: 1 addition & 0 deletions NAMESPACE
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@ export(gps_as_sf)
export(gtfs2gps)
export(gtfs_shapes_as_sf)
export(gtfs_stops_as_sf)
export(merge_gtfs_feeds)
export(read_gtfs)
export(remove_invalid)
export(test_gtfs_freq)
Expand Down
56 changes: 56 additions & 0 deletions R/merge_gtfs_feeds.R
Original file line number Diff line number Diff line change
@@ -0,0 +1,56 @@
#' @title Merge multiple GTFS feeds into a single one
#'
#' @description Build a single GTFS by joinning together the elements of multiple GTFS feeds.
#' @param gtfs_list A list of GTFS.zip files.
#' @return A single list of data.tables, where each index represents the respective GTFS file name.
#' @export
#' @examples
#'
#' # get a list of GTFS feeds
#' spo <- system.file("extdata/saopaulo.zip", package = "gtfs2gps")
#' poa <- system.file("extdata/poa.zip", package = "gtfs2gps")
#' gtfs_list <- list(spo, poa)
#'
#' new_gtfs <- merge_gtfs_feeds(gtfs_list)
#'

merge_gtfs_feeds <- function(gtfs_list){

# read all fees separately
all_feeds <- lapply(gtfs_list, read_gtfs)

# separate 1st feed
new_gtfs <- all_feeds[[2]]

# function to extract elements in a series of lists
extract_list_element <- function(i, element){ all_feeds[[i]][[element]] }


## piling up

# 1/8 agency
new_gtfs$agency <- lapply(X=1:length(all_feeds), FUN = extract_list_element, 'agency') %>% rbindlist(fill=T)

# 2/8 routes
new_gtfs$routes <- lapply(X=1:length(all_feeds), FUN = extract_list_element, 'routes') %>% rbindlist(fill=T)

# 3/8 stops
new_gtfs$stops <- lapply(X=1:length(all_feeds), FUN = extract_list_element, 'stops') %>% rbindlist(fill=T)

# 4/8 stop_times
new_gtfs$stop_times <- lapply(X=1:length(all_feeds), FUN = extract_list_element, 'stop_times') %>% rbindlist(fill=T)

# 5/8 shapes
new_gtfs$shapes <- lapply(X=1:length(all_feeds), FUN = extract_list_element, 'shapes') %>% rbindlist(fill=T)

# 6/8 trips
new_gtfs$trips <- lapply(X=1:length(all_feeds), FUN = extract_list_element, 'trips') %>% rbindlist(fill=T)

# 7/8 calendar
new_gtfs$calendar <- lapply(X=1:length(all_feeds), FUN = extract_list_element, 'calendar') %>% rbindlist(fill=T)

# 8/8 frequencies
new_gtfs$frequencies <- lapply(X=1:length(all_feeds), FUN = extract_list_element, 'frequencies') %>% rbindlist(fill=T)

return(new_gtfs)
}
27 changes: 27 additions & 0 deletions man/merge_gtfs_feeds.Rd

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

56 changes: 56 additions & 0 deletions tests_rafa/merge_gtfs_feeds.R
Original file line number Diff line number Diff line change
@@ -0,0 +1,56 @@
#' @title Merge multiple GTFS feeds into a single one
#'
#' @description Build a single GTFS by joinning together the elements of multiple GTFS feeds.
#' @param gtfs_list A list of GTFS.zip files.
#' @return A single list of data.tables, where each index represents the respective GTFS file name.
#' @export
#' @examples
#'
#' # get a list of GTFS feeds
#' spo <- system.file("extdata/saopaulo.zip", package = "gtfs2gps")
#' poa <- system.file("extdata/poa.zip", package = "gtfs2gps")
#' gtfs_list <- list(spo, poa)
#'
#' new_gtfs <- merge_gtfs_feeds(gtfs_list)
#'

merge_gtfs_feeds <- function(gtfs_list){

# read all fees separately
all_feeds <- lapply(gtfs_list, read_gtfs)

# separate 1st feed
new_gtfs <- all_feeds[[2]]

# function to extract elements in a series of lists
extract_list_element <- function(i, element){ all_feeds[[i]][[element]] }


## piling up

# 1/8 agency
new_gtfs$agency <- lapply(X=1:length(all_feeds), FUN = extract_list_element, 'agency') %>% rbindlist(fill=T)

# 2/8 routes
new_gtfs$routes <- lapply(X=1:length(all_feeds), FUN = extract_list_element, 'routes') %>% rbindlist(fill=T)

# 3/8 stops
new_gtfs$stops <- lapply(X=1:length(all_feeds), FUN = extract_list_element, 'stops') %>% rbindlist(fill=T)

# 4/8 stop_times
new_gtfs$stop_times <- lapply(X=1:length(all_feeds), FUN = extract_list_element, 'stop_times') %>% rbindlist(fill=T)

# 5/8 shapes
new_gtfs$shapes <- lapply(X=1:length(all_feeds), FUN = extract_list_element, 'shapes') %>% rbindlist(fill=T)

# 6/8 trips
new_gtfs$trips <- lapply(X=1:length(all_feeds), FUN = extract_list_element, 'trips') %>% rbindlist(fill=T)

# 7/8 calendar
new_gtfs$calendar <- lapply(X=1:length(all_feeds), FUN = extract_list_element, 'calendar') %>% rbindlist(fill=T)

# 8/8 frequencies
new_gtfs$frequencies <- lapply(X=1:length(all_feeds), FUN = extract_list_element, 'frequencies') %>% rbindlist(fill=T)

return(new_gtfs)
}

0 comments on commit 55eda53

Please sign in to comment.