Recode and Replace Values in Matrix-Like Objects
A small suite of functions to efficiently perform common recoding and replacing tasks in matrix-like objects (vectors, matrices, arrays, data frames, lists of atomic objects):
recode_num
and recode_char
can be used to efficiently recode multiple numeric or character values, respectively. The syntax is inspired by dplyr::recode
, but the functionality is enhanced in the following respects: (1) they are faster than dplyr::recode
, (2) when passed a data frame / list, all appropriately typed columns will be recoded. (3) They preserve the attributes of the data object and of columns in a data frame / list, and (4) recode_char
also supports regular expression matching using grepl
.
replace_NA
efficiently replaces NA/NaN
with a value (default is 0L
). data can be multi-typed. For numeric data a faster and more versatile alternative is provided by data.table::nafill
and data.table::setnafill
.
replace_Inf
replaces Inf/-Inf
(or optionally NaN/Inf/-Inf
) with a value (default is NA
). replace_Inf
skips non-numeric columns in a data frame.
replace_outliers
replaces values falling outside a 1- or 2-sided numeric threshold or outside a certain number of column- standard deviations with a value (default is NA
). replace_outliers
skips non-numeric columns in a data frame.
recode_num(X, ..., default = NULL, missing = NULL) recode_char(X, ..., default = NULL, missing = NULL, regex = FALSE, ignore.case = FALSE, fixed = FALSE) replace_NA(X, value = 0L) replace_Inf(X, value = NA, replace.nan = FALSE) replace_outliers(X, limits, value = NA, single.limit = c("SDs", "min", "max", "overall_SDs"))
X |
a vector, matrix, array, data frame or list of atomic objects. |
... |
comma-separated recode arguments of the form: |
default |
optional argument to specify a scalar value to replace non-matched elements with. |
missing |
optional argument to specify a scalar value to replace missing elements with. Note that to increase efficiency this is done before the rest of the recoding i.e. the recoding is performed on data where missing values are filled! |
regex |
logical. If |
value |
a single (scalar) value to replace matching elements with. |
replace.nan |
logical. |
limits |
either a vector of two-numeric values |
single.limit |
a character or integer (argument only applies if
|
ignore.case, fixed |
logical. Passed to |
These functions are not generic and do not offer support for factors or date(-time) objects. see dplyr::recode_factor
, forcats and other appropriate packages for dealing with these classes.
Simple replacing tasks on a vector can also effectively be handled by data.table::fcase
and data.table::fifelse
. Fast vectorised switches are also offered by package kit (functions iif
, nif
, vswitch
, nswitch
).
recode_char(c("a","b","c"), a = "b", b = "c") recode_char(month.name, ber = NA, regex = TRUE) mtcr <- recode_num(mtcars, `0` = 2, `4` = Inf, `1` = NaN) replace_Inf(mtcr) replace_Inf(mtcr, replace.nan = TRUE) replace_outliers(mtcars, c(2, 100)) # Replace all values below 2 and above 100 w. NA replace_outliers(mtcars, 2, single.limit = "min") # Replace all value smaller than 2 with NA replace_outliers(mtcars, 100, single.limit = "max") # Replace all value larger than 100 with NA replace_outliers(mtcars, 2) # Replace all values above or below 2 column- # standard-deviations from the column-mean w. NA replace_outliers(fgroup_by(iris, Species), 2) # Passing a grouped_df, pseries or pdata.frame # allows to remove outliers according to # in-group standard-deviation. see ?fscale
Please choose more modern alternatives, such as Google Chrome or Mozilla Firefox.