Cases, Variables, and Values
A data table is comprised of cases and
variables.
Each variable comprises values (or levels).
There is no hard distinction between a variable and a value. What’s a
variable in one situation may be a value in another, and vice versa.
A data table
Beckmans
Cases, Variables, and Values
- Variables:
who
, age
, sex
,
indoors
, outdoors
, tv
,
breakfast
- Values:
who
is a name
age
is numeric age
sex
is sex of the person
indoors
is a hobby while indoors
outdoors
is a hobby while outdoors
tv
is a favorite television show (…other than
YouTube)
breakfast
is typical meal preference before school
- Cases: Beckmans {Eden, Jack, Hazel}
So what?
- This allows us to easily redefine how rows are presented in the data
- Possibly motivated by the research question
- Possibly motivated by desire to join two data tables with different
case definitions
- Possibly motivated by a data visualization
- Also, some operations are easy in wide format, but hard in narrow
and vice versa
- We need tools that make it easy to switch back and forth
Note about terms “wide” and “narrow”
It’s actually possible for a “wider” form of the data and a “narrow”
form of the data to have the same number of columns! For example, when
the “key” only has two outcomes.
# this is "wide"--with 5 variables
Beckmans %>%
select(who, age, sex, indoors, outdoors)
# this is "narrow"--with 5 variables
Beckmans %>%
select(who, age, sex, indoors, outdoors) %>%
pivot_longer(cols = c(indoors, outdoors), names_to = "type", values_to = "preference")
NA
Questions:
RQ 1. How many babies of each name and sex? RQ 2. For each name, is
it primarily given to girls or boys? Which names are gender neutral?
With sexes side by side…
We can easily calculate balance associated with names
BabyTotalsWide <-
BabyTotalsWide %>%
rename(fem = F, male = M) %>% # `F` is a terrible variable name (why?)
mutate(prop_fem = fem / (male + fem),
prop_male = male / (male + fem),
name_specificity = pmax(prop_fem, prop_male)) # what does `pmax()` do?
BabyTotalsWide
pivot_longer( )
—when you have “Wide” and want
“Narrow”
Syntax:
NarrowOutput <-
WideInput %>%
pivot_longer(cols = c(wide_var1, wide_var2, ...), names_to = "long_var1", values_to "long_var2")
- The
cols
are the variables we want to combine (a.k.a.
melt, stack, fold, gather)
- e.g.
prop_fem
and prop_male
in this
case
BabyTotalsNarrow <-
BabyTotalsWide %>%
select(prop_fem, prop_male) %>%
pivot_longer(cols = c(prop_fem, prop_male), names_to = "sex", values_to = "proportion")
Adding missing grouping variables: `name`
BabyTotalsNarrow
With sexes stacked again…
We can make an intuitive bar chart (though some clean up is
needed…)
BabyTotalsNarrow %>%
ggplot() +
geom_bar(aes(x = name, fill = sex, weight = proportion))

NA
With some improvements
- clean up labels of sexes
- add title, source, & better axis labels (default y-axis label
was flat wrong)
# first, clean up the labels in `sex` for plotting
BabyTotalsNarrow %>%
mutate(sex = if_else(sex == "prop_fem",
true = "female",
false = if_else(sex == "prop_male",
true = "male",
false = "unk") # end of "inner" if_else()
) # ends the "outer" if_else()
) %>% # ends the mutate()
ggplot() +
geom_bar(aes(x = name, fill = sex, weight = proportion)) +
ggtitle("Gender Balance among Names of Beckman Kids",
subtitle = "source: U.S. Social Security Administration") +
xlab("Name") +
ylab("Proportion")

NA
LS0tCnRpdGxlOiAiUmVkZWZpbmluZyByb3dzOiBXaWRlIHZzIG5hcnJvdyBkYXRhIG9yZ2FuaXphdGlvbiIKc3VidGl0bGU6ICJEYXRhIENvbXB1dGluZyBDaGFwdGVyIDEyIgphdXRob3I6ICJQcm9mIE1hdHRoZXcgQmVja21hbiIKb3V0cHV0OiAKICBzbGlkeV9wcmVzZW50YXRpb246IGRlZmF1bHQKICBodG1sX25vdGVib29rOiBkZWZhdWx0Ci0tLQoKYGBge3IgaW5jbHVkZT1GQUxTRX0KbGlicmFyeSh0aWR5dmVyc2UpCmxpYnJhcnkocHJpbnRyKQpsaWJyYXJ5KG1vc2FpYykKbGlicmFyeShkY0RhdGEpCm9wdGlvbnMod2lkdGggPSA4MCkKYGBgCgojIyBDYXNlcywgVmFyaWFibGVzLCBhbmQgVmFsdWVzCgpBIGRhdGEgdGFibGUgaXMgY29tcHJpc2VkIG9mICpjYXNlcyogYW5kICp2YXJpYWJsZXMqLgoKRWFjaCAqdmFyaWFibGUqIGNvbXByaXNlcyAqdmFsdWVzKiAob3IgbGV2ZWxzKS4KClRoZXJlIGlzIG5vIGhhcmQgZGlzdGluY3Rpb24gYmV0d2VlbiBhIHZhcmlhYmxlIGFuZCBhIHZhbHVlLiAgV2hhdCdzIGEgdmFyaWFibGUgaW4gb25lIHNpdHVhdGlvbiBtYXkgYmUgYSB2YWx1ZSBpbiBhbm90aGVyLCBhbmQgdmljZSB2ZXJzYS4KCmBgYHtyIGVjaG89RkFMU0V9CgpCZWNrbWFucyA8LSAKICB0cmliYmxlKH53aG8sIH5hZ2UsIH5zZXgsIH5pbmRvb3JzLCB+b3V0ZG9vcnMsIH50diwgfmJyZWFrZmFzdCwgCiAgICAgICAgICAiRWRlbiIsIDExLCAiRiIsICJHYW1pbmciLCAiU3dpbW1pbmciLCAiQUZWIiwgInNhbmR3aWNoIiwgCiAgICAgICAgICAiSmFjayIsIDgsICJNIiwgIkxlZ29zIiwgIkNhbXBpbmciLCAiSGF3a2V5ZSIsICJjZXJlYWwiLAogICAgICAgICAgIkhhemVsIiwgNCwgIkYiLCAiUHV6emxlcyIsICJQbGF5Z3JvdW5kIiwgIkJsdWV5IiwgImJhZ2VsIG9yIHRvYXN0IikKCmBgYAoKQSBkYXRhIHRhYmxlCgpgYGB7cn0KQmVja21hbnMKYGBgCgoKIyMgQ2FzZXMsIFZhcmlhYmxlcywgYW5kIFZhbHVlcwoKLSBWYXJpYWJsZXM6IGB3aG9gLCBgYWdlYCwgYHNleGAsIGBpbmRvb3JzYCwgYG91dGRvb3JzYCwgYHR2YCwgYGJyZWFrZmFzdGAKICAgIC0gVmFsdWVzOiAKICAgICAgICAtIGB3aG9gIGlzIGEgbmFtZSAKICAgICAgICAtIGBhZ2VgIGlzIG51bWVyaWMgYWdlIAogICAgICAgIC0gYHNleGAgaXMgc2V4IG9mIHRoZSBwZXJzb24KICAgICAgICAtIGBpbmRvb3JzYCBpcyBhIGhvYmJ5IHdoaWxlIGluZG9vcnMKICAgICAgICAtIGBvdXRkb29yc2AgaXMgYSBob2JieSB3aGlsZSBvdXRkb29ycwogICAgICAgIC0gYHR2YCBpcyBhIGZhdm9yaXRlIHRlbGV2aXNpb24gc2hvdyAoLi4ub3RoZXIgdGhhbiBZb3VUdWJlKQogICAgICAgIC0gYGJyZWFrZmFzdGAgaXMgdHlwaWNhbCBtZWFsIHByZWZlcmVuY2UgYmVmb3JlIHNjaG9vbAotIENhc2VzOiBCZWNrbWFucyB7RWRlbiwgSmFjaywgSGF6ZWx9CgpgYGB7ciBlY2hvPUZBTFNFfQpCZWNrbWFucwpgYGAKCgojIyBUd28gZm9ybWF0cwoKLSBEYXRhIGluIEtleS9WYWx1ZSBmb3JtYXQgYXJlICoqbmFycm93KioKICAgIC0gcG9zc2libGUgdG8gZ2V0ICp0b28qIG5hcnJvdyBpZiB0aGUgbWVhbmluZyBvZiBjYXNlIGJlY29tZXMgYXdrd2FyZAotIFRoZSBjb3JyZXNwb25kaW5nICoqd2lkZSoqIGZvcm1hdCBoYXMgCiAgICAtIHNlcGFyYXRlIHZhcmlhYmxlcyBmb3IgZWFjaCBsZXZlbCBpbiBga2V5YAogICAgLSBzZXRzIHRoZSB2YWx1ZXMgZm9yIHRob3NlIHZhcmlhYmxlcyBmcm9tIHRoZSBpbmZvIGluIGB2YWx1ZWAKCiMjIyBOYXJyb3cKClE6IFdoYXQgSVMgZGlmZmVyZW50PwpROiBXaGF0IGlzIE5PVCBkaWZmZXJlbnQ/CgpgYGB7cn0KQmVja21hbnMgJT4lIAogIHBpdm90X2xvbmdlcihjb2xzID0gYyhpbmRvb3JzLCBvdXRkb29ycywgdHYsIGJyZWFrZmFzdCksIAogICAgICAgICAgICAgICBuYW1lc190byA9ICJ0eXBlIiwgdmFsdWVzX3RvID0gInByZWZlcmVuY2UiKQpgYGAKCgoKIyMjIChUb28pIE5hcnJvdwoKTm9uZSBvZiB0aGUgZGF0YSBoYXMgYWN0dWFsbHkgYmVlbiBsb3N0LCBidXQgaXQncyBub3QgYSBoZWxwZnVsIGZvcm0gc2luY2UgdGhlcmUgaXNuJ3QgYSB1c2VmdWwgZGVmaW5pdGlvbiBvZiAiY2FzZSIuICAKCmBgYHtyIGVjaG89RkFMU0UsIHdhcm5pbmc9RkFMU0V9CkJlY2ttYW5zICU+JSAKICBtdXRhdGUoYWdlID0gYXMuY2hhcmFjdGVyKGFnZSkpICU+JSAgCiAgcGl2b3RfbG9uZ2VyKGNvbHMgPSBjKHdobywgYWdlLCBzZXgsIGluZG9vcnMsIG91dGRvb3JzLCB0diwgYnJlYWtmYXN0KSwgCiAgICAgICAgICAgICAgIG5hbWVzX3RvID0gImtleSIsIHZhbHVlc190byA9ICJ2YWx1ZSIpCmBgYAoKIyMjIFdpZGUKCmBgYHtyIGVjaG89RkFMU0UsIHdhcm5pbmc9RkFMU0V9CkJlY2ttYW5zCmBgYAoKCgoKIyMgU28gd2hhdD8KCi0gVGhpcyBhbGxvd3MgdXMgdG8gZWFzaWx5IHJlZGVmaW5lIGhvdyByb3dzIGFyZSBwcmVzZW50ZWQgaW4gdGhlIGRhdGEKICAgIC0gUG9zc2libHkgbW90aXZhdGVkIGJ5IHRoZSByZXNlYXJjaCBxdWVzdGlvbgogICAgLSBQb3NzaWJseSBtb3RpdmF0ZWQgYnkgZGVzaXJlIHRvIGpvaW4gdHdvIGRhdGEgdGFibGVzIHdpdGggZGlmZmVyZW50IGNhc2UgZGVmaW5pdGlvbnMKICAgIC0gUG9zc2libHkgbW90aXZhdGVkIGJ5IGEgZGF0YSB2aXN1YWxpemF0aW9uCi0gQWxzbywgc29tZSBvcGVyYXRpb25zIGFyZSBlYXN5IGluIHdpZGUgZm9ybWF0LCBidXQgaGFyZCBpbiBuYXJyb3cgYW5kICp2aWNlIHZlcnNhKgotIFdlIG5lZWQgdG9vbHMgdGhhdCBtYWtlIGl0IGVhc3kgdG8gc3dpdGNoIGJhY2sgYW5kIGZvcnRoCgoKIyMgTm90ZSBhYm91dCB0ZXJtcyAid2lkZSIgYW5kICJuYXJyb3ciCgpJdCdzIGFjdHVhbGx5IHBvc3NpYmxlIGZvciBhICJ3aWRlciIgZm9ybSBvZiB0aGUgZGF0YSBhbmQgYSAibmFycm93IiBmb3JtIG9mIHRoZSBkYXRhIHRvIGhhdmUgdGhlIHNhbWUgbnVtYmVyIG9mIGNvbHVtbnMhICBGb3IgZXhhbXBsZSwgd2hlbiB0aGUgImtleSIgb25seSBoYXMgdHdvIG91dGNvbWVzLiAKCmBgYHtyfQojIHRoaXMgaXMgIndpZGUiLS13aXRoIDUgdmFyaWFibGVzCkJlY2ttYW5zICU+JQogIHNlbGVjdCh3aG8sIGFnZSwgc2V4LCBpbmRvb3JzLCBvdXRkb29ycykKYGBgCgpgYGB7cn0KIyB0aGlzIGlzICJuYXJyb3ciLS13aXRoIDUgdmFyaWFibGVzCkJlY2ttYW5zICU+JSAKICBzZWxlY3Qod2hvLCBhZ2UsIHNleCwgaW5kb29ycywgb3V0ZG9vcnMpICU+JQogIHBpdm90X2xvbmdlcihjb2xzID0gYyhpbmRvb3JzLCBvdXRkb29ycyksIG5hbWVzX3RvID0gInR5cGUiLCB2YWx1ZXNfdG8gPSAicHJlZmVyZW5jZSIpCgpgYGAKCgoKCiMjIyBFeGNlcnB0IGZyb20gYEJhYnlOYW1lc2AKCmBgYHtyIGVjaG89RkFMU0V9CmRhdGEoIkJhYnlOYW1lcyIsIHBhY2thZ2UgPSAiZGNEYXRhIikKClNob3J0QmFieU5hbWVzIDwtIAogIEJhYnlOYW1lcyAlPiUKICBmaWx0ZXIoIG5hbWUgJWluJSBjKCJFZGVuIiwgIkphY2siLCAiSGF6ZWwiKSwgCiAgICAgICAgICB5ZWFyICVpbiUgMjAxMjoyMDEzICkgJT4lIAogIGFycmFuZ2UobmFtZSwgeWVhcikKYGBgCgpgYGB7ciBlY2hvPUZBTFNFfQpTaG9ydEJhYnlOYW1lcwpgYGAKCiMjIyBRdWVzdGlvbnM6CgpSUSAxLiBIb3cgbWFueSBiYWJpZXMgb2YgZWFjaCBuYW1lIGFuZCBzZXg/ClJRIDIuIEZvciBlYWNoIG5hbWUsIGlzIGl0IHByaW1hcmlseSBnaXZlbiB0byBnaXJscyBvciBib3lzPyAgV2hpY2ggbmFtZXMgYXJlIGdlbmRlciBuZXV0cmFsPwoKCgojIyBJbiBuYXJyb3cgZm9ybWF0CgpgYGB7cn0KZGF0YSgiQmFieU5hbWVzIiwgcGFja2FnZSA9ICJkY0RhdGEiKQoKQmFieU5hbWVzIDwtIAogIEJhYnlOYW1lcyAlPiUKICBmaWx0ZXIoIG5hbWUgJWluJSBjKCJFZGVuIiwgIkphY2siLCAiSGF6ZWwiKSkgCmBgYAoKUlEgMS4gSG93IG1hbnkgYmFiaWVzIG9mIGVhY2ggbmFtZSBhbmQgc2V4PwoKYGBge3J9CkJhYnlUb3RhbHMgPC0KICBCYWJ5TmFtZXMgJT4lCiAgZ3JvdXBfYnkobmFtZSwgc2V4KSAlPiUKICBzdW1tYXJpc2UodG90YWwgPSBzdW0oY291bnQsIG5hLnJtID0gVFJVRSkpCmBgYAoKYGBge3IgZWNobz1GQUxTRX0KQmFieVRvdGFscwpgYGAKCkVhc3khCgoKCiMjIEluIFdpZGUgZm9ybWF0CgpSUSAyLiBXaGljaCBuYW1lcyBhcmUgbW9zdCBnZW5kZXIgbmV1dHJhbD8KCgpgYGAKV2lkZU91dHB1dCA8LSAKICBOYXJyb3dJbnB1dCAlPiUgCiAgcGl2b3Rfd2lkZXIobmFtZXNfZnJvbSA9IHZhcjEsIHZhbHVlc19mcm9tID0gdmFyMiwgdmFsdWVzX2ZpbGwgPSAwKQpgYGAKCi0gd2Ugd2FudCBhIG5ldyBjb2x1bW4gZm9yIGVhY2ggY2F0ZWdvcnkgb2YgYHNleGAsIHNvIGBuYW1lc19mcm9tID0gc2V4YCAKICAgIC0gd2Ugd2lsbCAidW5zdGFjayIgZWFjaCBhdmFpbGFibGUgY2F0ZWdvcnkgYXMgYSBuZXcgdmFyaWFibGUgKGEuay5hLiBjYXN0LCBzcHJlYWQsIHVuZm9sZCkKICAgIC0gY2F0ZWdvcmllcyBvZiBgc2V4YCB3ZXJlICJGIiBhbmQgIk0iIGluIHRoaXMgZXhhbXBsZQotIHRoZSB2YWx1ZXMvZW50cmllcyBmb3Igb3VyIG5ldyB2YXJpYWJsZXMgYXJlIGNvbWluZyBmcm9tIGB0b3RhbGAsIHNvIGB2YWx1ZXNfZnJvbSA9IHRvdGFsYAogICAgLSBgdmFsdWVzX2ZpbGwgPSAwYCBzcGVjaWZpZXMgYSBkZWZhdWx0IHZhbHVlCiAgICAtIGUuZy4sIGluIDIwMTIgbm8gb25lIGluIGBCYWJ5TmFtZXNgIHdhcyBhc3NpZ25lZCB7SGF6ZWwsIE19LCBzbyBpdCBzaG91bGQgYmUgemVybwoKCmBgYHtyfQpCYWJ5VG90YWxzV2lkZSA8LSAKICBCYWJ5VG90YWxzICU+JSAKICBwaXZvdF93aWRlcihuYW1lc19mcm9tID0gc2V4LCB2YWx1ZXNfZnJvbSA9IHRvdGFsLCB2YWx1ZXNfZmlsbCA9IDApCgpCYWJ5VG90YWxzV2lkZQpgYGAKCiMjIFdpdGggc2V4ZXMgc2lkZSBieSBzaWRlLi4uIAoKV2UgY2FuIGVhc2lseSBjYWxjdWxhdGUgYmFsYW5jZSBhc3NvY2lhdGVkIHdpdGggbmFtZXMKCgpgYGB7cn0KCkJhYnlUb3RhbHNXaWRlIDwtIAogIEJhYnlUb3RhbHNXaWRlICU+JSAKICByZW5hbWUoZmVtID0gRiwgbWFsZSA9IE0pICU+JSAgICAgICAgICMgYEZgIGlzIGEgdGVycmlibGUgdmFyaWFibGUgbmFtZSAod2h5PykKICBtdXRhdGUocHJvcF9mZW0gID0gZmVtICAvIChtYWxlICsgZmVtKSwgCiAgICAgICAgIHByb3BfbWFsZSA9IG1hbGUgLyAobWFsZSArIGZlbSksCiAgICAgICAgIG5hbWVfc3BlY2lmaWNpdHkgPSBwbWF4KHByb3BfZmVtLCBwcm9wX21hbGUpKSAgICAjIHdoYXQgZG9lcyBgcG1heCgpYCBkbz8KCkJhYnlUb3RhbHNXaWRlCmBgYAoKIyMgYHBpdm90X2xvbmdlciggKWAtLS13aGVuIHlvdSBoYXZlICJXaWRlIiBhbmQgd2FudCAiTmFycm93IgoKU3ludGF4OgoKYGBgCk5hcnJvd091dHB1dCA8LSAKICBXaWRlSW5wdXQgJT4lIAogIHBpdm90X2xvbmdlcihjb2xzID0gYyh3aWRlX3ZhcjEsIHdpZGVfdmFyMiwgLi4uKSwgbmFtZXNfdG8gPSAibG9uZ192YXIxIiwgdmFsdWVzX3RvICJsb25nX3ZhcjIiKQpgYGAKCi0gVGhlIGBjb2xzYCBhcmUgdGhlIHZhcmlhYmxlcyB3ZSB3YW50IHRvIGNvbWJpbmUgKGEuay5hLiBtZWx0LCBzdGFjaywgZm9sZCwgZ2F0aGVyKQotIGUuZy4gYHByb3BfZmVtYCBhbmQgYHByb3BfbWFsZWAgaW4gdGhpcyBjYXNlCgpgYGB7ciBlY2hvPVRSVUV9CkJhYnlUb3RhbHNOYXJyb3cgPC0gCiAgQmFieVRvdGFsc1dpZGUgJT4lIAogIHNlbGVjdChwcm9wX2ZlbSwgcHJvcF9tYWxlKSAlPiUKICBwaXZvdF9sb25nZXIoY29scyA9IGMocHJvcF9mZW0sIHByb3BfbWFsZSksIG5hbWVzX3RvID0gInNleCIsIHZhbHVlc190byA9ICJwcm9wb3J0aW9uIikgCgpCYWJ5VG90YWxzTmFycm93CmBgYAoKIyMgV2l0aCBzZXhlcyBzdGFja2VkIGFnYWluLi4uCgpXZSBjYW4gbWFrZSBhbiBpbnR1aXRpdmUgYmFyIGNoYXJ0ICh0aG91Z2ggc29tZSBjbGVhbiB1cCBpcyBuZWVkZWQuLi4pCgpgYGB7cn0KQmFieVRvdGFsc05hcnJvdyAlPiUKICBnZ3Bsb3QoKSArIAogIGdlb21fYmFyKGFlcyh4ID0gbmFtZSwgZmlsbCA9IHNleCwgd2VpZ2h0ID0gcHJvcG9ydGlvbikpIAogIApgYGAKCiMjIyMgV2l0aCBzb21lIGltcHJvdmVtZW50cyAKCi0gY2xlYW4gdXAgbGFiZWxzIG9mIHNleGVzCi0gYWRkIHRpdGxlLCBzb3VyY2UsICYgYmV0dGVyIGF4aXMgbGFiZWxzIChkZWZhdWx0IHktYXhpcyBsYWJlbCB3YXMgZmxhdCB3cm9uZykKCmBgYHtyfQojIGZpcnN0LCBjbGVhbiB1cCB0aGUgbGFiZWxzIGluIGBzZXhgIGZvciBwbG90dGluZwpCYWJ5VG90YWxzTmFycm93ICU+JQogIG11dGF0ZShzZXggPSBpZl9lbHNlKHNleCA9PSAicHJvcF9mZW0iLCAKICAgICAgICAgICAgICAgICAgICAgICB0cnVlID0gImZlbWFsZSIsIAogICAgICAgICAgICAgICAgICAgICAgIGZhbHNlID0gaWZfZWxzZShzZXggPT0gInByb3BfbWFsZSIsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cnVlID0gIm1hbGUiLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmFsc2UgPSAidW5rIikgICMgZW5kIG9mICJpbm5lciIgaWZfZWxzZSgpCiAgICAgICAgICAgICAgICAgICAgICAgKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIGVuZHMgdGhlICJvdXRlciIgaWZfZWxzZSgpCiAgICAgICAgICkgJT4lICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIGVuZHMgdGhlIG11dGF0ZSgpIAogIGdncGxvdCgpICsgCiAgZ2VvbV9iYXIoYWVzKHggPSBuYW1lLCBmaWxsID0gc2V4LCB3ZWlnaHQgPSBwcm9wb3J0aW9uKSkgKyAKICBnZ3RpdGxlKCJHZW5kZXIgQmFsYW5jZSBhbW9uZyBOYW1lcyBvZiBCZWNrbWFuIEtpZHMiLCAKICAgICAgICAgIHN1YnRpdGxlID0gInNvdXJjZTogVS5TLiBTb2NpYWwgU2VjdXJpdHkgQWRtaW5pc3RyYXRpb24iKSArIAogIHhsYWIoIk5hbWUiKSArIAogIHlsYWIoIlByb3BvcnRpb24iKQogIApgYGAK