# cdata

#### John Mount, Win-Vector LLC

#### 2019-04-20

The `cdata` package is a demonstration of the “coordinatized data” theory and includes an implementation of the “fluid data” methodology. The recommended tutorial is: Fluid data reshaping with cdata. We also have a short free cdata screencast (and another example can be found here).

Briefly `cdata` supplies data transform operators that:

- Work on local data or with any `DBI` data source.
- Are powerful generalizations of the operators commonly called `pivot` and `un-pivot`.

A quick example:

    run_vignette <- requireNamespace("RSQLite", quietly = TRUE) &&
      requireNamespace("DBI", quietly = TRUE)

    library("cdata")
    my_db <- DBI::dbConnect(RSQLite::SQLite(),
                            ":memory:")

    # pivot example
    d <- build_frame(
       "meas", "val" /
       "AUC" , 0.6   /
       "R2"  , 0.2   )

    DBI::dbWriteTable(my_db,
                      'd',
                      d,
                      temporary = TRUE)
    qlook(my_db, 'd')

    ## table `d` SQLiteConnection
    ##  nrow: 2
    ## 'data.frame':    2 obs. of  2 variables:
    ##  $ meas: chr  "AUC" "R2"
    ##  $ val : num  0.6 0.2

    cT <- build_pivot_control_q('d',
                                columnToTakeKeysFrom= 'meas',
                                columnToTakeValuesFrom= 'val',
                                my_db = my_db)
    tab <- blocks_to_rowrecs_q('d',
                               keyColumns = NULL,
                               controlTable = cT,
                               my_db = my_db)
    qlook(my_db, tab)

    ## table `mvtcq_46255426283341597082_0000000000` SQLiteConnection
    ##  nrow: 1
    ## 'data.frame':    1 obs. of  2 variables:
    ##  $ AUC: num 0.6
    ##  $ R2 : num 0.2

    DBI::dbDisconnect(my_db)

Install via CRAN:

    install.packages("cdata")

Note: `cdata` is targeted at data with “tame column names” (column names that are valid both in databases, and as `R` unquoted variable names) and basic types (column values that are simple `R` types such as `character`, `numeric`, `logical`, and so on).