The hardware and bandwidth for this mirror is donated by dogado GmbH, the Webhosting and Full Service-Cloud Provider. Check out our Wordpress Tutorial.
If you wish to report a bug, or if you are interested in having us mirror your free-software or open-source project, please feel free to contact us at mirror[@]dogado.de.
starwarsdb provides data from the Star Wars API as a set of relational tables, or as an in-package DuckDB database.
Formats: Metadata, Local Tables, Remote Tables, Data Model (dm), API (rwars)
You can install starwarsdb from CRAN:
install.packages("starwarsdb")
Or you can install the development version of starwarsdb from GitHub with remotes:
# install.packages("remotes")
::install_github("gadenbuie/starwarsdb")
remotes
# For remotes <= 2.1.0
::install_github("gadenbuie/starwarsdb@main") remotes
All of the tables are available when you load starwarsdb
library(dplyr)
library(starwarsdb)
or via
data(package = "starwarsdb")
The schema
table includes information about the tables
that were sourced from SWAPI.
schema#> # A tibble: 5 x 4
#> endpoint endpoint_title endpoint_description properties
#> <chr> <chr> <chr> <list>
#> 1 films Film A Star Wars film <tibble [14 × 4…
#> 2 vehicles Starship A Starship or vehicle <tibble [19 × 4…
#> 3 species People A species within the Star Wars unive… <tibble [15 × 4…
#> 4 planets Planet A planet. <tibble [14 × 4…
#> 5 people People A person within the Star Wars univer… <tibble [16 × 4…
%>%
schema filter(endpoint == "films") %>%
pull(properties)
#> [[1]]
#> # A tibble: 14 x 4
#> variable type description format
#> <chr> <chr> <chr> <chr>
#> 1 starships array The starship resources featured within this fil… <NA>
#> 2 edited string the ISO 8601 date format of the time that this … date-t…
#> 3 planets array The planet resources featured within this film. <NA>
#> 4 producer string The producer(s) of this film. <NA>
#> 5 title string The title of this film. <NA>
#> 6 url string The url of this resource uri
#> 7 release_date string The release date at original creator country. date
#> 8 vehicles array The vehicle resources featured within this film. <NA>
#> 9 episode_id integer The episode number of this film. <NA>
#> 10 director string The director of this film. <NA>
#> 11 created string The ISO 8601 date format of the time that this … date-t…
#> 12 opening_cra… string The opening crawl text at the beginning of this… <NA>
#> 13 characters array The people resources featured within this film. <NA>
#> 14 species array The species resources featured within this film. <NA>
Ask questions, like who flew an X-Wing?
<- pilots %>% filter(vehicle == "X-wing")
x_wing_pilots
x_wing_pilots#> # A tibble: 4 x 2
#> pilot vehicle
#> <chr> <chr>
#> 1 Luke Skywalker X-wing
#> 2 Biggs Darklighter X-wing
#> 3 Wedge Antilles X-wing
#> 4 Jek Tono Porkins X-wing
%>% semi_join(x_wing_pilots, by = c(name = "pilot"))
people #> # A tibble: 4 x 11
#> name height mass hair_color skin_color eye_color birth_year gender homeworld
#> <chr> <dbl> <dbl> <chr> <chr> <chr> <dbl> <chr> <chr>
#> 1 Luke… 172 77 blond fair blue 19 mascu… Tatooine
#> 2 Bigg… 183 84 black light brown 24 mascu… Tatooine
#> 3 Wedg… 170 77 brown fair hazel 21 mascu… Corellia
#> 4 Jek … 180 110 brown fair blue NA mascu… Bestine …
#> # … with 2 more variables: species <chr>, sex <chr>
starwarsdb also includes the entire data set as a DuckDB database, appropriate for teaching and practicing remote database access with dbplyr.
<- starwars_connect()
con
<- tbl(con, "people")
people_rmt <- tbl(con, "pilots")
pilots_rmt
pilots_rmt#> # Source: table<pilots> [?? x 2]
#> # Database: duckdb_connection
#> pilot vehicle
#> <chr> <chr>
#> 1 Chewbacca Millennium Falcon
#> 2 Han Solo Millennium Falcon
#> 3 Lando Calrissian Millennium Falcon
#> 4 Nien Nunb Millennium Falcon
#> 5 Luke Skywalker X-wing
#> 6 Biggs Darklighter X-wing
#> 7 Wedge Antilles X-wing
#> 8 Jek Tono Porkins X-wing
#> 9 Darth Vader TIE Advanced x1
#> 10 Boba Fett Slave 1
#> # … with more rows
<- pilots_rmt %>% filter(vehicle == "X-wing")
x_wing_pilots
x_wing_pilots#> # Source: lazy query [?? x 2]
#> # Database: duckdb_connection
#> pilot vehicle
#> <chr> <chr>
#> 1 Luke Skywalker X-wing
#> 2 Biggs Darklighter X-wing
#> 3 Wedge Antilles X-wing
#> 4 Jek Tono Porkins X-wing
%>% semi_join(x_wing_pilots, by = c(name = "pilot"))
people_rmt #> # Source: lazy query [?? x 11]
#> # Database: duckdb_connection
#> name height mass hair_color skin_color eye_color birth_year gender homeworld
#> <chr> <dbl> <dbl> <chr> <chr> <chr> <dbl> <chr> <chr>
#> 1 Luke… 172 77 blond fair blue 19 mascu… Tatooine
#> 2 Bigg… 183 84 black light brown 24 mascu… Tatooine
#> 3 Wedg… 170 77 brown fair hazel 21 mascu… Corellia
#> 4 Jek … 180 110 brown fair blue NA mascu… Bestine …
#> # … with 2 more variables: species <chr>, sex <chr>
Finally, starwarsdb provides a function that returns
a pre-configured dm object.
The dm
package wraps local data frames into a complete
relational data model.
library(dm, warn.conflicts = FALSE)
<- starwars_dm()
sw_dm
sw_dm#> ── Metadata ────────────────────────────────────────────────────────────────────
#> Tables: `films`, `people`, `planets`, `species`, `vehicles`, … (9 total)
#> Columns: 58
#> Primary keys: 5
#> Foreign keys: 10
%>%
sw_dm dm_select_tbl(pilots, people) %>%
dm_filter("pilots", vehicle == "X-wing") %>%
dm_apply_filters() %>%
dm_zoom_to("people") %>%
semi_join(pilots)
#> # Zoomed table: people
#> # A tibble: 4 x 11
#> name height mass hair_color skin_color eye_color birth_year gender homeworld
#> <chr> <dbl> <dbl> <chr> <chr> <chr> <dbl> <chr> <chr>
#> 1 Luke… 172 77 blond fair blue 19 mascu… Tatooine
#> 2 Bigg… 183 84 black light brown 24 mascu… Tatooine
#> 3 Wedg… 170 77 brown fair hazel 21 mascu… Corellia
#> 4 Jek … 180 110 brown fair blue NA mascu… Bestine …
#> # … with 2 more variables: species <chr>, sex <chr>
dm_draw(sw_dm)
For API access from R, check out the rwars package by Oliver
Keyes. Big thanks to rwars
for making it easy to access the
Star Wars API!
These binaries (installable software) and packages are in development.
They may not be fully stable and should be used with caution. We make no claims about them.
Health stats visible at Monitor.