cdata (version 1.0.7)

rowrecs_to_blocks: Map a set of columns to rows (takes a data.frame).

Description

Transform data facts from columns into additional rows controlTable.

Usage

rowrecs_to_blocks(wideTable, controlTable, ..., checkNames = TRUE,
  checkKeys = FALSE, strict = FALSE,
  controlTableKeys = colnames(controlTable)[[1]], columnsToCopy = NULL,
  tmp_name_source = wrapr::mk_tmp_name_source("rrtbl"),
  temporary = TRUE)

# S3 method for default rowrecs_to_blocks(wideTable, controlTable, ..., checkNames = TRUE, checkKeys = FALSE, strict = FALSE, controlTableKeys = colnames(controlTable)[[1]], columnsToCopy = NULL, tmp_name_source = wrapr::mk_tmp_name_source("rrtobd"), temporary = TRUE)

# S3 method for relop rowrecs_to_blocks(wideTable, controlTable, ..., checkNames = TRUE, checkKeys = FALSE, strict = FALSE, controlTableKeys = colnames(controlTable)[[1]], columnsToCopy = NULL, tmp_name_source = wrapr::mk_tmp_name_source("rrtbl"), temporary = TRUE)

Arguments

wideTable

data.frame containing data to be mapped (in-memory data.frame).

controlTable

table specifying mapping (local data frame).

...

force later arguments to be by name.

checkNames

logical, if TRUE check names.

checkKeys

logical, if TRUE check columnsToCopy form row keys (not a requirement, unless you want to be able to invert the operation).

strict

logical, if TRUE check control table name forms.

controlTableKeys

character, which column names of the control table are considered to be keys.

columnsToCopy

character array of column names to copy.

tmp_name_source

a tempNameGenerator from cdata::mk_tmp_name_source()

temporary

logical, if TRUE use temporary tables

Value

long table built by mapping wideTable to one row per group

Details

This is using the theory of "fluid data" (https://github.com/WinVector/cdata), which includes the principle that each data cell has coordinates independent of the storage details and storage detail dependent coordinates (usually row-id, column-id, and group-id) can be re-derived at will (the other principle is that there may not be "one true preferred data shape" and many re-shapings of data may be needed to match data to different algorithms and methods).

The controlTable defines the names of each data element in the two notations: the notation of the tall table (which is row oriented) and the notation of the wide table (which is column oriented). controlTable[ , 1] (the group label) cross colnames(controlTable) (the column labels) are names of data cells in the long form. controlTable[ , 2:ncol(controlTable)] (column labels) are names of data cells in the wide form. To get behavior similar to tidyr::gather/spread one builds the control table by running an appropriate query over the data.

Some discussion and examples can be found here: https://winvector.github.io/FluidData/FluidData.html and here https://github.com/WinVector/cdata.

See Also

build_unpivot_control, blocks_to_rowrecs

Examples

Run this code
# NOT RUN {
  # un-pivot example
  d <- data.frame(AUC = 0.6, R2 = 0.2)
  cT <- build_unpivot_control(nameForNewKeyColumn= 'meas',
                              nameForNewValueColumn= 'val',
                              columnsToTakeFrom= c('AUC', 'R2'))
  rowrecs_to_blocks(d, cT)



d <- data.frame(AUC = 0.6, R2 = 0.2)
cT <- build_unpivot_control(
  nameForNewKeyColumn= 'meas',
  nameForNewValueColumn= 'val',
  columnsToTakeFrom= c('AUC', 'R2'))

ops <- rquery::local_td(d) %.>%
  rowrecs_to_blocks(., cT)
cat(format(ops))

if(requireNamespace("rqdatatable", quietly = TRUE)) {
  library("rqdatatable")
  d %.>%
    ops %.>%
    print(.)
}

if(requireNamespace("RSQLite", quietly = TRUE)) {
  db <- DBI::dbConnect(RSQLite::SQLite(), ":memory:")
  DBI::dbWriteTable(db,
                    'd',
                    d,
                    overwrite = TRUE,
                    temporary = TRUE)
  db %.>%
    ops %.>%
    print(.)
  DBI::dbDisconnect(db)
}

# }

Run the code above in your browser using DataLab