Getting started with GTFSwizard

knitr::opts_chunk$set(collapse = TRUE, comment = "#>")

GTFSwizard creates, reads, validates, explores, edits, and exports General Transit Feed Specification (GTFS) Schedule feeds. Its functions work with a wizardgtfs object: a named list of GTFS tables plus a dates_services table that connects calendar dates, services, and service patterns.

Use an included feed

The package includes two real, reduced examples from Fortaleza, Brazil. for_rail_gtfs is small enough for learning and examples; for_bus_gtfs is useful for checking workflows on a larger bus network.

library(GTFSwizard)

gtfs <- for_rail_gtfs
summary(gtfs)

Access an individual GTFS table with the usual list syntax.

head(gtfs$routes)
head(gtfs$stops)

Read an existing feed

read_gtfs() reads a GTFS zip archive and validates its required tables, fields, identifiers, sequences, dates, and times. Supply the archive path explicitly. To choose a file interactively, call explore_gtfs() without a feed in an interactive R session.

gtfs <- read_gtfs("path/to/feed.zip")
explore_gtfs() # choose a zip file and open the dashboard

Use as_wizardgtfs() when the GTFS tables are already available as a named list. If shapes.txt is absent, the default behavior infers straight lines from ordered stop coordinates for analysis and visualization.

converted <- as_wizardgtfs(unclass(for_rail_gtfs))
inherits(converted, "wizardgtfs")

Create a feed from tables

create_gtfs() validates the supplied tables using the same package rules. A feed must define service using calendar, calendar_dates, or both.

created <- create_gtfs(
  agency = data.frame(
    agency_id = "A",
    agency_name = "Demo Transit",
    agency_url = "https://example.com",
    agency_timezone = "America/Fortaleza"
  ),
  routes = data.frame(
    route_id = "R1", agency_id = "A", route_short_name = "1",
    route_long_name = "Central", route_type = 3
  ),
  trips = data.frame(
    route_id = "R1", service_id = "WK", trip_id = "T1"
  ),
  stop_times = data.frame(
    trip_id = "T1",
    arrival_time = c("08:00:00", "08:10:00"),
    departure_time = c("08:00:00", "08:10:00"),
    stop_id = c("S1", "S2"),
    stop_sequence = 1:2
  ),
  stops = data.frame(
    stop_id = c("S1", "S2"),
    stop_name = c("First", "Second"),
    stop_lat = c(-3.73, -3.74),
    stop_lon = c(-38.52, -38.53)
  ),
  calendar = data.frame(
    service_id = "WK",
    monday = 1, tuesday = 1, wednesday = 1, thursday = 1,
    friday = 1, saturday = 0, sunday = 0,
    start_date = "20260101", end_date = "20261231"
  )
)

created

Inspect and plot

The print method previews tables, summary() reports system-level properties, and plot() draws the network. Analytical functions return ordinary tibbles or sf objects so they remain compatible with standard R workflows.

plot(gtfs)

Export a feed

write_gtfs() removes the internal dates_services table, restores standard GTFS date and spatial columns, and writes a zip archive.

output <- tempfile(fileext = ".zip")
write_gtfs(created, output)
file.exists(output)
unlink(output)

Continue with service analysis, or learn how to filter and edit feeds.



Try the GTFSwizard package in your browser

Any scripts or data that you put into this service are public.

GTFSwizard documentation built on Aug. 21, 2026, 5:16 p.m.