The hardware and bandwidth for this mirror is donated by dogado GmbH, the Webhosting and Full Service-Cloud Provider. Check out our Wordpress Tutorial.
If you wish to report a bug, or if you are interested in having us mirror your free-software or open-source project, please feel free to contact us at mirror[@]dogado.de.
keyholder
is a package for storing information
(keys) about rows of data frame like objects. The common use
cases are to track rows of data without modifying it and to backup and
restore information about rows. This is done with creating a class
keyed_df which has special attribute “keys”. Keys are
updated according to changes in rows of reference data frame.
keyholder
is designed to work tightly with dplyr package. All its one- and
two-table verbs update keys properly.
You can install current stable version from CRAN with:
install.packages("keyholder")
Also you can install development version from github with:
# install.packages("devtools")
::install_github("echasnovski/keyholder") devtools
keyholder
provides a set of functions to work with
keys:
assign_keys()
and
key_by()
.keys()
. Get one specific key with
pull_key()
.restore_keys()
and its scoped variants
(*_all()
, *_if()
and
*_at()
).rename_keys()
and its scoped
variants.remove_keys()
and its scoped
variants. Completely unkey object with unkey()
.use_id()
and special .id
key.For more detailed explanations and examples see package vignettes and documentation.
library(dplyr)
library(keyholder)
<- mtcars %>% as_tibble() mtcars_tbl
<- mtcars_tbl %>%
mtcars_tbl_id # Creates a key '.id' with row index
use_id() %>%
filter(vs == 1, gear == 4)
mtcars_tbl_id#> # A keyed object. Keys: .id
#> # A tibble: 10 × 11
#> mpg cyl disp hp drat wt qsec vs am gear carb
#> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
#> 1 22.8 4 108 93 3.85 2.32 18.6 1 1 4 1
#> 2 24.4 4 147. 62 3.69 3.19 20 1 0 4 2
#> 3 22.8 4 141. 95 3.92 3.15 22.9 1 0 4 2
#> # … with 7 more rows
%>% pull_key(.id)
mtcars_tbl_id #> [1] 3 8 9 10 11 18 19 20 26 32
<- mtcars_tbl %>%
mtcars_tbl_keyed # Backup
key_by(vs, am, gear) %>%
# Modify
mutate(vs = am) %>%
group_by(vs) %>%
mutate(gear = max(gear))
# Restore with recomputing groups
<- mtcars_tbl_keyed %>% restore_keys_all()
mtcars_tbl_restored <- mtcars_tbl %>% group_by(vs)
mtcars_tbl_grouped all.equal(
as.data.frame(mtcars_tbl_restored),
as.data.frame(mtcars_tbl_grouped),
check.attributes = FALSE
)#> [1] TRUE
all.equal(
group_indices(mtcars_tbl_restored),
group_indices(mtcars_tbl_grouped)
)#> [1] TRUE
# Restore with renaming
%>%
mtcars_tbl_keyed restore_keys_at("vs", .funs = list(~ paste0(., "_old")))
#> # A keyed object. Keys: vs, am, gear
#> # A tibble: 32 × 12
#> # Groups: vs [2]
#> mpg cyl disp hp drat wt qsec vs am gear carb vs_old
#> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
#> 1 21 6 160 110 3.9 2.62 16.5 1 1 5 4 0
#> 2 21 6 160 110 3.9 2.88 17.0 1 1 5 4 0
#> 3 22.8 4 108 93 3.85 2.32 18.6 1 1 5 1 1
#> # … with 29 more rows
dplyr
’s *_if scoped variants of
verbs:# Restored key goes to the end of the tibble
%>%
mtcars_tbl key_by(mpg, .exclude = TRUE) %>%
mutate_if(is.numeric, round, digits = 0) %>%
restore_keys_all()
#> # A keyed object. Keys: mpg
#> # A tibble: 32 × 11
#> cyl disp hp drat wt qsec vs am gear carb mpg
#> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
#> 1 6 160 110 4 3 16 0 1 4 4 21
#> 2 6 160 110 4 3 17 0 1 4 4 21
#> 3 4 108 93 4 2 19 1 1 4 1 22.8
#> # … with 29 more rows
These binaries (installable software) and packages are in development.
They may not be fully stable and should be used with caution. We make no claims about them.
Health stats visible at Monitor.