Key is a vector which goal is to provide information about rows in reference
data frame. Its length should always be equal to number of rows in
data frame. Keys are stored as tibble in attribute "keys"
and so one data frame can have multiple keys. Data frame with keys is
implemented as class keyed_df.
keys(.tbl) <- value
assign_keys(.tbl, value)
key_by(.tbl, ..., .add = FALSE, .exclude = FALSE)
unkey(.tbl)
Reference data frame .
Values of keys (converted to tibble).
Variables to be used as keys defined in similar fashion as in
dplyr::select()
.
Whether to add keys to (possibly) existing ones. If FALSE
keys
will be overridden.
Whether to exclude key variables from .tbl
.
key_by
ignores grouping when creating keys. Also if .add == TRUE
and names of some added keys match the names of existing keys the new ones
will override the old ones.
Value for keys<-
should not be NULL
because it is converted to tibble
with zero rows. To remove keys use unkey()
, remove_keys()
or
restore_keys()
. assign_keys
is a more suitable for piping wrapper for
keys<-
.
df <- dplyr::as_tibble(mtcars)
# Value is converted to tibble
keys(df) <- 1:nrow(df)
# This will throw an error
if (FALSE) {
keys(df) <- 1:10
}
# Use 'vs' and 'am' as keys
df %>% key_by(vs, am)
#> # A keyed object. Keys: vs, am
#> # A tibble: 32 × 11
#> mpg cyl disp hp drat wt qsec vs am gear carb
#> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
#> 1 21 6 160 110 3.9 2.62 16.5 0 1 4 4
#> 2 21 6 160 110 3.9 2.88 17.0 0 1 4 4
#> 3 22.8 4 108 93 3.85 2.32 18.6 1 1 4 1
#> 4 21.4 6 258 110 3.08 3.22 19.4 1 0 3 1
#> 5 18.7 8 360 175 3.15 3.44 17.0 0 0 3 2
#> 6 18.1 6 225 105 2.76 3.46 20.2 1 0 3 1
#> 7 14.3 8 360 245 3.21 3.57 15.8 0 0 3 4
#> 8 24.4 4 147. 62 3.69 3.19 20 1 0 4 2
#> 9 22.8 4 141. 95 3.92 3.15 22.9 1 0 4 2
#> 10 19.2 6 168. 123 3.92 3.44 18.3 1 0 4 4
#> # … with 22 more rows
df %>% key_by(vs, am, .exclude = TRUE)
#> # A keyed object. Keys: vs, am
#> # A tibble: 32 × 9
#> mpg cyl disp hp drat wt qsec gear carb
#> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
#> 1 21 6 160 110 3.9 2.62 16.5 4 4
#> 2 21 6 160 110 3.9 2.88 17.0 4 4
#> 3 22.8 4 108 93 3.85 2.32 18.6 4 1
#> 4 21.4 6 258 110 3.08 3.22 19.4 3 1
#> 5 18.7 8 360 175 3.15 3.44 17.0 3 2
#> 6 18.1 6 225 105 2.76 3.46 20.2 3 1
#> 7 14.3 8 360 245 3.21 3.57 15.8 3 4
#> 8 24.4 4 147. 62 3.69 3.19 20 4 2
#> 9 22.8 4 141. 95 3.92 3.15 22.9 4 2
#> 10 19.2 6 168. 123 3.92 3.44 18.3 4 4
#> # … with 22 more rows
df %>% key_by(vs) %>% key_by(am, .add = TRUE, .exclude = TRUE)
#> # A keyed object. Keys: vs, am
#> # A tibble: 32 × 10
#> mpg cyl disp hp drat wt qsec vs gear carb
#> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
#> 1 21 6 160 110 3.9 2.62 16.5 0 4 4
#> 2 21 6 160 110 3.9 2.88 17.0 0 4 4
#> 3 22.8 4 108 93 3.85 2.32 18.6 1 4 1
#> 4 21.4 6 258 110 3.08 3.22 19.4 1 3 1
#> 5 18.7 8 360 175 3.15 3.44 17.0 0 3 2
#> 6 18.1 6 225 105 2.76 3.46 20.2 1 3 1
#> 7 14.3 8 360 245 3.21 3.57 15.8 0 3 4
#> 8 24.4 4 147. 62 3.69 3.19 20 1 4 2
#> 9 22.8 4 141. 95 3.92 3.15 22.9 1 4 2
#> 10 19.2 6 168. 123 3.92 3.44 18.3 1 4 4
#> # … with 22 more rows
# Override keys
df %>% key_by(vs, am) %>% dplyr::mutate(vs = 1) %>%
key_by(gear, vs, .add = TRUE)
#> # A keyed object. Keys: vs, am, gear
#> # A tibble: 32 × 11
#> mpg cyl disp hp drat wt qsec vs am gear carb
#> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
#> 1 21 6 160 110 3.9 2.62 16.5 1 1 4 4
#> 2 21 6 160 110 3.9 2.88 17.0 1 1 4 4
#> 3 22.8 4 108 93 3.85 2.32 18.6 1 1 4 1
#> 4 21.4 6 258 110 3.08 3.22 19.4 1 0 3 1
#> 5 18.7 8 360 175 3.15 3.44 17.0 1 0 3 2
#> 6 18.1 6 225 105 2.76 3.46 20.2 1 0 3 1
#> 7 14.3 8 360 245 3.21 3.57 15.8 1 0 3 4
#> 8 24.4 4 147. 62 3.69 3.19 20 1 0 4 2
#> 9 22.8 4 141. 95 3.92 3.15 22.9 1 0 4 2
#> 10 19.2 6 168. 123 3.92 3.44 18.3 1 0 4 4
#> # … with 22 more rows
# Use select helpers
df %>% key_by(dplyr::one_of(c("vs", "am")))
#> # A keyed object. Keys: vs, am
#> # A tibble: 32 × 11
#> mpg cyl disp hp drat wt qsec vs am gear carb
#> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
#> 1 21 6 160 110 3.9 2.62 16.5 0 1 4 4
#> 2 21 6 160 110 3.9 2.88 17.0 0 1 4 4
#> 3 22.8 4 108 93 3.85 2.32 18.6 1 1 4 1
#> 4 21.4 6 258 110 3.08 3.22 19.4 1 0 3 1
#> 5 18.7 8 360 175 3.15 3.44 17.0 0 0 3 2
#> 6 18.1 6 225 105 2.76 3.46 20.2 1 0 3 1
#> 7 14.3 8 360 245 3.21 3.57 15.8 0 0 3 4
#> 8 24.4 4 147. 62 3.69 3.19 20 1 0 4 2
#> 9 22.8 4 141. 95 3.92 3.15 22.9 1 0 4 2
#> 10 19.2 6 168. 123 3.92 3.44 18.3 1 0 4 4
#> # … with 22 more rows
df %>% key_by(dplyr::everything())
#> # A keyed object. Keys: mpg, cyl, disp, hp, drat, wt, qsec, vs, am, gear, carb
#> # A tibble: 32 × 11
#> mpg cyl disp hp drat wt qsec vs am gear carb
#> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
#> 1 21 6 160 110 3.9 2.62 16.5 0 1 4 4
#> 2 21 6 160 110 3.9 2.88 17.0 0 1 4 4
#> 3 22.8 4 108 93 3.85 2.32 18.6 1 1 4 1
#> 4 21.4 6 258 110 3.08 3.22 19.4 1 0 3 1
#> 5 18.7 8 360 175 3.15 3.44 17.0 0 0 3 2
#> 6 18.1 6 225 105 2.76 3.46 20.2 1 0 3 1
#> 7 14.3 8 360 245 3.21 3.57 15.8 0 0 3 4
#> 8 24.4 4 147. 62 3.69 3.19 20 1 0 4 2
#> 9 22.8 4 141. 95 3.92 3.15 22.9 1 0 4 2
#> 10 19.2 6 168. 123 3.92 3.44 18.3 1 0 4 4
#> # … with 22 more rows