| Type: | Package | 
| Version: | 0.2.0 | 
| Date: | 2026-10-23 | 
| Title: | Functions for Transforming Categorical Variables | 
| URL: | https://github.com/benjaminrich/mappings | 
| BugReports: | https://github.com/benjaminrich/mappings/issues | 
| Description: | Easily create functions to map between different sets of values, such as for re-labeling categorical variables. | 
| License: | GPL-3 | 
| Suggests: | testthat | 
| Language: | en-US | 
| Encoding: | UTF-8 | 
| RoxygenNote: | 7.3.3 | 
| NeedsCompilation: | no | 
| Packaged: | 2025-10-23 07:37:44 UTC; benja | 
| Author: | Benjamin Rich [aut, cre, cph] | 
| Maintainer: | Benjamin Rich <mail@benjaminrich.net> | 
| Repository: | CRAN | 
| Date/Publication: | 2025-10-23 07:50:02 UTC | 
Convert a mapping to data.frame
Description
The resulting data.frame has 2 columns: mapsfrom, and mapsto.
Usage
## S3 method for class 'mapping'
as.data.frame(x, ...)
Arguments
x | 
 A   | 
... | 
 Ignored.  | 
Value
A data.frame.
Construct a factor from one or more vectors
Description
A factor is constructed from one or more atomic vectors.  If more than
one atomic vector is supplied, then a compound value is constructed by
concatenating the values together. The order of the levels is the natural
order in which the values appear.
Usage
cf(x, ..., sep = ";")
Arguments
x | 
 An atomic vector.  | 
... | 
 Additional atomic vectors (optional).  | 
sep | 
 A   | 
Value
A factor.
Examples
x <- c("A", "B", "A")
y <- c(2, 5, 7)
cf(x, y)
mapping(cf(x, y), c("X", "Y", "Z"))
Mapping from continuous to categorical
Description
Mapping from continuous to categorical
Usage
cut_mapping(..., to = NULL, na = NA, ch.as.fact = TRUE)
Arguments
... | 
 Passed to   | 
to | 
 Passed to   | 
na | 
 Passed to   | 
ch.as.fact | 
 Passed to   | 
Value
A function that cuts a numeric vector and maps the result.
Examples
x <- c(0, 10, 20, 30, Inf)
m <- cut_mapping(x, right=FALSE,
    to=c("0 to <10", "10 to <20", "20 to <30", ">= 30"))
print(m)
m(c(5, 27, 3, 10, 99))
Domain and codomain of a mapping.
Description
Domain and codomain of a mapping.
Usage
domain(x)
codomain(x)
Arguments
x | 
 A   | 
Value
x A vector of the same type as we supplied when the
mapping was created.
Note
These aren't the true domain and codomain in the mathematical sense; both can contain duplicates.
Examples
sex.mapping <- mapping(c("Female", "F", "Male", "M"), c(0, 0, 1, 1))
domain(sex.mapping)
codomain(sex.mapping)
Inverse of a mapping
Description
Given a mapping x, return the inverse mapping.
Usage
inverse(x)
Arguments
x | 
 A   | 
Value
The inverse mapping.
Examples
sex.mapping <- mapping(c("Female", "F", "Male", "M"), c(0, 0, 1, 1))
sex.inverse.mapping <- inverse(sex.mapping)
sex.inverse.mapping(c(0, 0, 1, 0))
Generate a Mapping Function
Description
This function returns a function that does a simple mapping from one set of value to another. It is a function-generating function.
Usage
mapping(from, to, na = NA, ch.as.fact = TRUE, unmapped = NA)
pmapping(..., unmapped = I)
Arguments
from | 
 A vector. This is the domain of the function.  | 
to | 
 A vector of the same length as   | 
na | 
 An alternative way to specify the value that   | 
ch.as.fact | 
 A logical.  Should the mapping return a   | 
unmapped | 
 This is a fallback for the case when a value can't be mapped
because it doesn't match any of the elements in   | 
... | 
 Passed to   | 
Details
This function returns a function.  When called with a vector
argument x, this function will return a vector y of
the same length as x and such that each element y[i]
is equal to to[j] where j is the smallest integer such
that from[j] == x[i], and the value unmapped (or, if it's a function,
unmapped(x[i])) if no such j exists.
pmapping() creates a partial mapping, which maps certain elements while
preserving the rest (by making unmapped=I the default).
Note: from will always be matched as a string, even if it is numeric.
So, mapping(1, "A") and mapping("1", "A") are the same, and
both functions will return "A" when called with either 1 or
"1".
Value
A function that translates from from to to.  The function also
has an inverse which is a function that performs the inverse mapping.
See Also
inverse(),
codomain(),
domain(),
remap(),
text2mapping(),
cut_mapping()
Examples
sex.mapping <- mapping(c("Female", "F", "Male", "M"), c(0, 0, 1, 1))
sex.mapping(c("Female", "Female", "Male", "F"))
sex.mapping <- mapping(0:1, c("Female", "Male"), na="Unknown")
sex.mapping(c(0, 1, NA, 0, 1, 1, 0))
inverse(sex.mapping)(c("Female", "Male", "Unknown"))
from <- c(0, 1, NA)
to <- c(NA, "Male", "Female")
x <- c(0, 1, NA, 0, 1, 1, 0)
sex.mapping <- mapping(c(0, 1, NA), c(NA, "Male", "Female"))
sex.mapping
sex.mapping(c(0, 1, NA, 0, 1, 1, 0))
inverse(sex.mapping)
inverse(sex.mapping)(c("Female", "Male", NA))
race.mapping <- mapping(c(
      "1"="WHITE",
      "2"="BLACK OR AFRICAN AMERICAN",
      "5"="AMERICAN INDIAN OR ALASKA NATIVE"))
race.mapping(1:5)
# Use of `unmapped`
dv.mapping <- mapping("BQL", -99, unmapped=as.numeric)
dv.mapping(c("3.1", "BQL", "2.7", "100"))
# Map certain elements and preserves the rest
x <- LETTERS[1:5]
pmapping("B", "Z")(x)
mapping("B", "Z", unmapped=I)(x)  # Same
A mapping that adds a prefix and/or suffix
Description
A mapping that adds a prefix and/or suffix
Usage
paste_mapping(prefix = NULL, suffix = NULL)
Arguments
prefix, suffix | 
 Character strings.  | 
Value
A mapping function.
Examples
# The objective is to turn a numeric vector into a factor such that
# the levels preserve the numeric order but contain the suffix "mg"
# (i.e., so that 2 becomes "2 mg" for instance)
x <- c(1, 2, 1, 10, 3, 2, 2, 1)
# The following does not produce the levels in the desired numeric order
# (because alphabetical ordering places "10" before "2")
factor(paste(x, "mg"))
# The following works, but takes 2 lines of code and requires a variable
# assignment
y <- factor(x)
levels(y) <- paste(levels(y), "mg")
y
# This does the same thing with one line of code and no assignment
paste_mapping(, " mg")(x)
# -----
# In this example, you start with a factor, and want to preserve its ordering
x <- factor(c("Treatment", "Placebo"), levels=c("Treatment", "Placebo"))
# Again, this won't work as desired
factor(paste("Randomized to", x, "Group"))
# But this will
paste_mapping("Randomized to ", " Group")(x)
Print a mapping
Description
Print a mapping
Usage
## S3 method for class 'mapping'
print(x, ...)
Arguments
x | 
|
... | 
 Ignored.  | 
Value
Returns x invisibly.
Re-map a variable
Description
Apply a mapping to a vector directly. The mapping is temporary and not saved.
Usage
remap(x, ...)
Arguments
x | 
 The values to apply the   | 
... | 
 Passed to   | 
Value
The values returned by calling the mapping function.
Examples
x <- c("A", "B", "A")
remap(x, c(A=0, B=1))
Convenient shorthand for specifying mappings with text strings
Description
Convenient shorthand for specifying mappings with text strings
Usage
text2mapping(
  text,
  file = NULL,
  sep = "|",
  flip = FALSE,
  convert.na = TRUE,
  numericWherePossible = TRUE,
  ...
)
Arguments
text | 
 A multi-line string specifying a mapping with 2 columns (see examples).  | 
file | 
 If   | 
sep | 
 Character used as column separator.  | 
flip | 
 If   | 
convert.na | 
 If   | 
numericWherePossible | 
 If   | 
... | 
 Further arguments passed to   | 
Value
A mapping.
Examples
f <- text2mapping("
L | Low
M | Medium
H | High
")
f(warpbreaks$tension)