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)

Arguments

.tbl

Reference data frame .

value

Values of keys (converted to tibble).

...

Variables to be used as keys defined in similar fashion as in dplyr::select().

.add

Whether to add keys to (possibly) existing ones. If FALSE keys will be overridden.

.exclude

Whether to exclude key variables from .tbl.

Details

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<-.

See also

Examples

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 x 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 x 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 x 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 x 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 x 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 x 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