The goal of tibblify is to provide an easy way to convert a nested list into a tibble.
Install the released version of tibblify from CRAN:
install.packages("tibblify")Install the development version of tibblify from GitHub:
# install.packages("pak")
pak::pak("wranglezone/tibblify")To illustrate how tibblify() works, we’ll start with a
list containing information about four GitHub users.
library(tibblify)
library(repurrrsive)
gh_users_small <- purrr::map(
repurrrsive::gh_users,
~ .x[c("followers", "login", "url", "name", "location", "email", "public_gists")]
)
names(gh_users_small[[1]])
#> [1] "followers" "login" "url" "name" "location"
#> [6] "email" "public_gists"We can rectangle gh_users_small automatically with
tibblify():
tibblify(gh_users_small)
#> # A tibble: 6 × 7
#> followers login url name location email public_gists
#> <int> <chr> <chr> <chr> <chr> <chr> <int>
#> 1 303 gaborcsardi https://api.github.co… Gábo… Chippen… csar… 6
#> 2 780 jennybc https://api.github.co… Jenn… Vancouv… <NA> 54
#> 3 3958 jtleek https://api.github.co… Jeff… Baltimo… <NA> 12
#> 4 115 juliasilge https://api.github.co… Juli… Salt La… <NA> 4
#> 5 213 leeper https://api.github.co… Thom… London,… <NA> 46
#> 6 34 masalmon https://api.github.co… Maël… Barcelo… <NA> 0We can avoid the note about the unspecified field by formally
providing a spec starting with guess_tspec():
spec <- guess_tspec(gh_users_small, inform_unspecified = FALSE)
# Drop the unused email specification.
spec$fields$email <- NULL
tibblify(gh_users_small, spec = spec)
#> # A tibble: 6 × 6
#> followers login url name location public_gists
#> <int> <chr> <chr> <chr> <chr> <int>
#> 1 303 gaborcsardi https://api.github.com/user… Gábo… Chippen… 6
#> 2 780 jennybc https://api.github.com/user… Jenn… Vancouv… 54
#> 3 3958 jtleek https://api.github.com/user… Jeff… Baltimo… 12
#> 4 115 juliasilge https://api.github.com/user… Juli… Salt La… 4
#> 5 213 leeper https://api.github.com/user… Thom… London,… 46
#> 6 34 masalmon https://api.github.com/user… Maël… Barcelo… 0Learn more in vignette("tibblify").
jsonlite::fromJSON() is excellent for parsing JSON, but
tibblify allows for strict specifications and can be faster
for complex nested lists.tidyr::hoist() and tidyr::unnest_longer()
allow for step-by-step rectangling. tibblify aims to
rectangle the data in a single step based on a schema.Please note that the tibblify project is released with a Contributor Code of Conduct. By contributing to this project, you agree to abide by its terms.