quick-conversion | R Documentation |
Fast, flexible and precise conversion of common data objects, without method dispatch and extensive checks:
qDF
, qDT
and qTBL
convert vectors, matrices, higher-dimensional arrays and suitable lists to data frame, data.table and tibble, respectively.
qM
converts vectors, higher-dimensional arrays, data frames and suitable lists to matrix.
mctl
and mrtl
column- or row-wise convert a matrix to list, data frame or data.table. They are used internally by qDF/qDT/qTBL
, dapply
, BY
, etc...
qF
converts atomic vectors to factor (documented on a separate page).
as_numeric_factor
, as_integer_factor
, and as_character_factor
convert factors, or all factor columns in a data frame / list, to character or numeric (by converting the levels).
# Converting between matrices, data frames / tables / tibbles
qDF(X, row.names.col = FALSE, keep.attr = FALSE, class = "data.frame")
qDT(X, row.names.col = FALSE, keep.attr = FALSE, class = c("data.table", "data.frame"))
qTBL(X, row.names.col = FALSE, keep.attr = FALSE, class = c("tbl_df","tbl","data.frame"))
qM(X, row.names.col = NULL , keep.attr = FALSE, class = NULL, sep = ".")
# Programmer functions: matrix rows or columns to list / DF / DT - fully in C++
mctl(X, names = FALSE, return = "list")
mrtl(X, names = FALSE, return = "list")
# Converting factors or factor columns
as_numeric_factor(X, keep.attr = TRUE)
as_integer_factor(X, keep.attr = TRUE)
as_character_factor(X, keep.attr = TRUE)
X |
a vector, factor, matrix, higher-dimensional array, data frame or list. | |||||||||||||||||||||
row.names.col |
can be used to add an column saving names or row.names when converting objects to data frame using | |||||||||||||||||||||
keep.attr |
logical. | |||||||||||||||||||||
class |
if a vector of classes is passed here, the converted object will be assigned these classes. If | |||||||||||||||||||||
sep |
character. Separator used for interacting multiple variables selected through | |||||||||||||||||||||
names |
logical. Should the list be named using row/column names from the matrix? | |||||||||||||||||||||
return |
an integer or string specifying what to return. The options are:
|
Object conversions using these functions are maximally efficient and involve 3 consecutive steps: (1) Converting the storage mode / dimensions / data of the object, (2) converting / modifying the attributes and (3) modifying the class of the object:
(1) is determined by the choice of function and the optional row.names.col
argument. Higher-dimensional arrays are converted by expanding the second dimension (adding columns, same as as.matrix, as.data.frame, as.data.table
).
(2) is determined by the keep.attr
argument: keep.attr = TRUE
seeks to preserve the attributes of the object. Its effect is like copying attributes(converted) <- attributes(original)
, and then modifying the "dim", "dimnames", "names", "row.names"
and "levels"
attributes as necessitated by the conversion task. keep.attr = FALSE
only converts / assigns / removes these attributes and drops all others.
(3) is determined by the class
argument: Setting class = "myclass"
will yield a converted object of class "myclass"
, with any other / prior classes being removed by this replacement. Setting class = NULL
does NOT mean that a class NULL
is assigned (which would remove the class attribute), but rather that the default classes are assigned: qM
assigns no class, qDF
a class "data.frame"
, and qDT
a class c("data.table", "data.frame")
. At this point there is an interaction with keep.attr
: If keep.attr = TRUE
and class = NULL
and the object converted already inherits the respective default classes, then any other inherited classes will also be preserved (with qM(x, keep.attr = TRUE, class = NULL)
any class will be preserved if is.matrix(x)
evaluates to TRUE
.)
The default keep.attr = FALSE
ensures hard conversions so that all unnecessary attributes are dropped. Furthermore in qDF/qDT/qTBL
the default classes were explicitly assigned. This is to ensure that the default methods apply, even if the user chooses to preserve further attributes. For qM
a more lenient default setup was chosen to enable the full preservation of time series matrices with keep.attr = TRUE
. If the user wants to keep attributes attached to a matrix but make sure that all default methods work properly, either one of qM(x, keep.attr = TRUE, class = "matrix")
or unclass(qM(x, keep.attr = TRUE))
should be employed.
qDF
- returns a data.frame
qDT
- returns a data.table
qTBL
- returns a tibble
qM
- returns a matrix
mctl
, mrtl
- return a list, data frame or data.table
qF
- returns a factor
as_numeric_factor
- returns X with factors converted to numeric (double) variables
as_integer_factor
- returns X with factors converted to integer variables
as_character_factor
- returns X with factors converted to character variables
qF
, Collapse Overview
## Basic Examples
mtcarsM <- qM(mtcars) # Matrix from data.frame
mtcarsDT <- qDT(mtcarsM) # data.table from matrix columns
mtcarsTBL <- qTBL(mtcarsM) # tibble from matrix columns
head(mrtl(mtcarsM, TRUE, "data.frame")) # data.frame from matrix rows, etc..
head(qDF(mtcarsM, "cars")) # Adding a row.names column when converting from matrix
head(qDT(mtcars, "cars")) # Saving row.names when converting data frame to data.table
head(qM(iris, "Species")) # Examples converting data to matrix, saving information
head(qM(GGDC10S, is.character)) # as rownames
head(qM(gv(GGDC10S, -(2:3)), 1:3, sep = "-")) # plm-style rownames
qDF(fmean(mtcars), c("cars", "mean")) # Data frame from named vector, with names
# mrtl() and mctl() are very useful for iteration over matrices
# Think of a coordninates matrix e.g. from sf::st_coordinates()
coord <- matrix(rnorm(10), ncol = 2, dimnames = list(NULL, c("X", "Y")))
# Then we can
for (d in mrtl(coord)) {
cat("lon =", d[1], ", lat =", d[2], fill = TRUE)
# do something complicated ...
}
rm(coord)
## Factors
cylF <- qF(mtcars$cyl) # Factor from atomic vector
cylF
# Factor to numeric conversions
identical(mtcars, as_numeric_factor(dapply(mtcars, qF)))
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.