This function binds a dataset to itself along adjacent pairs of a key
variable. It is invoked by geom_flow()
to convert data in lodes
form to something similar to alluvia form.
self_adjoin(
data,
key,
by = NULL,
link = NULL,
keep.x = NULL,
keep.y = NULL,
suffix = c(".x", ".y")
)
A data frame in lodes form (repeated measures data; see
alluvial-data
).
Column of data
indicating sequential collection; handled as in
tidyr::spread()
.
Character vector of variables to self-adjoin by; passed to
dplyr::mutate-joins
functions.
Character vector of variables to adjoin. Will be replaced by
pairs of variables suffixed by suffix
.
Character vector of variables to associate with the
first (respectively, second) copy of data
after adjoining. These
variables can overlap with each other but cannot overlap with by
or
link
.
Suffixes to add to the adjoined link
variables; passed to
dplyr::mutate-joins
functions.
self_adjoin
invokes dplyr::mutate-joins
functions in order to convert
a dataset with measures along a discrete key
variable into a dataset
consisting of column bindings of these measures (by any by
variables) along
adjacent values of key
.
Other alluvial data manipulation:
alluvial-data
# self-adjoin `majors` data
data(majors)
major_changes <- self_adjoin(majors, key = semester,
by = "student", link = c("semester", "curriculum"))
major_changes$change <- major_changes$curriculum.x == major_changes$curriculum.y
head(major_changes)
#> step student semester.x curriculum.x semester.y curriculum.y change
#> 1 CURR1 1 CURR1 Painting CURR3 Painting TRUE
#> 2 CURR1 2 CURR1 Painting CURR3 Painting TRUE
#> 3 CURR1 6 CURR1 Sculpure CURR3 Sculpure TRUE
#> 4 CURR1 8 CURR1 Painting CURR3 Painting TRUE
#> 5 CURR1 9 CURR1 Sculpure CURR3 Art History FALSE
#> 6 CURR1 10 CURR1 Painting CURR3 Painting TRUE
# self-adjoin `vaccinations` data
data(vaccinations)
vaccination_steps <- self_adjoin(vaccinations, key = survey, by = "subject",
link = c("survey", "response"),
keep.x = c("freq"))
head(vaccination_steps)
#> step subject survey.x response.x freq survey.y response.y
#> 1 ms153_NSA 1 ms153_NSA Always 48 ms432_NSA Always
#> 2 ms153_NSA 2 ms153_NSA Always 9 ms432_NSA Always
#> 3 ms153_NSA 3 ms153_NSA Always 66 ms432_NSA Missing
#> 4 ms153_NSA 4 ms153_NSA Always 1 ms432_NSA Missing
#> 5 ms153_NSA 5 ms153_NSA Always 11 ms432_NSA Missing
#> 6 ms153_NSA 6 ms153_NSA Always 1 ms432_NSA Never
vaccination_steps <- self_adjoin(vaccinations, key = survey, by = "subject",
link = c("survey", "response"),
keep.x = c("freq"),
keep.y = c("start_date", "end_date"))
head(vaccination_steps)
#> step subject survey.x response.x freq survey.y response.y start_date
#> 1 ms153_NSA 1 ms153_NSA Always 48 ms432_NSA Always 2015-06-04
#> 2 ms153_NSA 2 ms153_NSA Always 9 ms432_NSA Always 2015-06-04
#> 3 ms153_NSA 3 ms153_NSA Always 66 ms432_NSA Missing 2015-06-04
#> 4 ms153_NSA 4 ms153_NSA Always 1 ms432_NSA Missing 2015-06-04
#> 5 ms153_NSA 5 ms153_NSA Always 11 ms432_NSA Missing 2015-06-04
#> 6 ms153_NSA 6 ms153_NSA Always 1 ms432_NSA Never 2015-06-04
#> end_date
#> 1 2015-10-05
#> 2 2015-10-05
#> 3 2015-10-05
#> 4 2015-10-05
#> 5 2015-10-05
#> 6 2015-10-05