This is the main objective of the variable key system.

keyApply(
  dframe,
  key,
  diagnostic = TRUE,
  safeNumericToInteger = TRUE,
  trimws = "both",
  ignoreCase = TRUE,
  drop = TRUE,
  debug = FALSE
)

Arguments

dframe

An R data frame

key

A variable key object, of class either "key" or "keylong"

diagnostic

Default TRUE: Compare the old and new data frames carefully with the keyDiagnostic function.

safeNumericToInteger

Default TRUE: Should we treat values which appear to be integers as integers? If a column is numeric, it might be safe to treat it as an integer. In many csv data sets, the values coded c(1, 2, 3) are really integers, not floats c(1.0, 2.0, 3.0). See safeInteger.

trimws

Default is "both", can change to "left", "right", or set as NULL to avoid any trimming.

ignoreCase

Default TRUE. If column name is capitalized differently than name_old in the key, but the two are otherwise identical, then the difference in capitalization will be ignored.

drop

Default TRUE. True implies drop = c("vars", "vals"). TRUE applies to both variables ("vars") and values ("vals"). "vars" means that a column will be omitted from data if it is not in the key "name_old". Similarly, if anything except "." appears in value_old, then setting drop="vals" means omission of a value from key "value_old" causes observations with those values to become NA. This is the original variable key behavior. The drop argument allows "partial keys", beginning with kutils version 1.12. drop = FALSE means that neither values nor variables are omitted. Rather than TRUE, one can specify either drop = "vars", or drop = "vals".

debug

Default FALSE. If TRUE, emit some warnings.

Value

A new data.frame object, with renamed and recoded variables

Author

Paul Johnson <pauljohn@ku.edu>

Examples

mydf.key.path <- system.file("extdata", "mydf.key.csv", package = "kutils")
mydf.key <-  keyImport(mydf.key.path)
#> keyImport guessed that is a wide format key.
mydf.path <- system.file("extdata", "mydf.csv", package = "kutils")

mydf <- read.csv(mydf.path, stringsAsFactors = FALSE)
mydf2 <- keyApply(mydf, mydf.key)
#> [1] "Variable x5 has 20 unique values. Too large for a table."
#>       x4 (old var)
#> x4      0  1  2  3  4  5  6  7 11 999
#>   0    10  0  0  0  0  0  0  0  0   0
#>   1     0 30  0  0  0  0  0  0  0   0
#>   2     0  0 46  0  0  0  0  0  0   0
#>   3     0  0  0 40  0  0  0  0  0   0
#>   4     0  0  0  0 33  0  0  0  0   0
#>   5     0  0  0  0  0 21  0  0  0   0
#>   6     0  0  0  0  0  0  5  0  0   0
#>   7     0  0  0  0  0  0  0  4  0   0
#>   11    0  0  0  0  0  0  0  0  1   0
#>   <NA>  0  0  0  0  0  0  0  0  0  10
#>      x3 (old var)
#> x3    hi lo med
#>   lo   0 64   0
#>   mid 74  0  62
#>    x2 (old var)
#> x2   a  b  c  d  f
#>   f  0  0  0  0 31
#>   d  0  0  0 36  0
#>   c  0  0 51  0  0
#>   b  0 41  0  0  0
#>   a 41  0  0  0  0
#>         x1 (old var)
#> x1       bobby cindy greg marcia peter
#>   Cindy      0    34    0      0     0
#>   Bobby     43     0    0      0     0
#>   Peter      0     0    0      0    42
#>   Marcia     0     0    0     51     0
#>   Greg       0     0   30      0     0
#>       x7 (old var)
#> x7      a  b  c  d  f
#>   fail  0  0  0 43 48
#>   pass 36 40 33  0  0
#>    x6 (old var)
#> x6   1  2  3  4  5
#>   F 44  0  0  0  0
#>   D  0 41  0  0  0
#>   C  0  0 34  0  0
#>   B  0  0  0 45  0
#>   A  0  0  0  0 36

nls.keylong.path <- system.file("extdata", "natlongsurv.key_long.csv", package = "kutils")
nls.keylong <- keyImport(nls.keylong.path, long = TRUE)
data(natlongsurv)
nls.dat <- keyApply(natlongsurv, nls.keylong)
#> [1] "Variable id has 20 unique values. Too large for a table."
#>                      R0003300 (old var)
#> marital                  1    2    3    4    5    6
#>   Married              841    0    0    0    0    0
#>   Married (sp absent)    0   60    0    0    0    0
#>   Widowed                0    0    1    0    0    0
#>   Divorced               0    0    0   27    0    0
#>   Separated              0    0    0    0   33    0
#>   Never Married          0    0    0    0    0 1905
#>              R0005700 (old var)
#> schoolstopage   -4    8   10   11   12   13   14   15   16   17   18   19   20   21   22   23   24
#>          8       0    1    0    0    0    0    0    0    0    0    0    0    0    0    0    0    0
#>          10      0    0    1    0    0    0    0    0    0    0    0    0    0    0    0    0    0
#>          11      0    0    0    4    0    0    0    0    0    0    0    0    0    0    0    0    0
#>          12      0    0    0    0    2    0    0    0    0    0    0    0    0    0    0    0    0
#>          13      0    0    0    0    0    7    0    0    0    0    0    0    0    0    0    0    0
#>          14      0    0    0    0    0    0   27    0    0    0    0    0    0    0    0    0    0
#>          15      0    0    0    0    0    0    0   71    0    0    0    0    0    0    0    0    0
#>          16      0    0    0    0    0    0    0    0  144    0    0    0    0    0    0    0    0
#>          17      0    0    0    0    0    0    0    0    0  374    0    0    0    0    0    0    0
#>          18      0    0    0    0    0    0    0    0    0    0  383    0    0    0    0    0    0
#>          19      0    0    0    0    0    0    0    0    0    0    0  141    0    0    0    0    0
#>          20      0    0    0    0    0    0    0    0    0    0    0    0   61    0    0    0    0
#>          21      0    0    0    0    0    0    0    0    0    0    0    0    0   72    0    0    0
#>          22      0    0    0    0    0    0    0    0    0    0    0    0    0    0   46    0    0
#>          23      0    0    0    0    0    0    0    0    0    0    0    0    0    0    0   14    0
#>          24      0    0    0    0    0    0    0    0    0    0    0    0    0    0    0    0    4
#>          <NA> 1515    0    0    0    0    0    0    0    0    0    0    0    0    0    0    0    0
#> [1] "Variable iq has 20 unique values. Too large for a table."
#>                  R1051600 (old var)
#> schoollastgrade85   -5   -4    9   10   11   12   13   14   15   16   17   18
#>              9       0    0    3    0    0    0    0    0    0    0    0    0
#>              10      0    0    0    1    0    0    0    0    0    0    0    0
#>              11      0    0    0    0    8    0    0    0    0    0    0    0
#>              12      0    0    0    0    0   45    0    0    0    0    0    0
#>              13      0    0    0    0    0    0   26    0    0    0    0    0
#>              14      0    0    0    0    0    0    0   30    0    0    0    0
#>              15      0    0    0    0    0    0    0    0    7    0    0    0
#>              16      0    0    0    0    0    0    0    0    0   45    0    0
#>              17      0    0    0    0    0    0    0    0    0    0   13    0
#>              18      0    0    0    0    0    0    0    0    0    0    0   37
#>              <NA>  148 2504    0    0    0    0    0    0    0    0    0    0
#>        R1302000 (old var)
#> smoke91   -5   -4    0    1
#>     NA   232   13    0    0
#>     No     0    0 1994    0
#>     Yes    0    0    0  628
#> [1] "Variable smokenum91 has 20 unique values. Too large for a table."
#> [1] "Variable alchdays91 has 20 unique values. Too large for a table."
#>                  R6235600 (old var)
#> schoollastgrade01  -5   0   1   3   4   5   6   7   8   9  10  11  12  13  14  15  16  17  18
#>              0      0   3   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0
#>              1      0   0   1   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0
#>              3      0   0   0   1   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0
#>              4      0   0   0   0   3   0   0   0   0   0   0   0   0   0   0   0   0   0   0
#>              5      0   0   0   0   0   3   0   0   0   0   0   0   0   0   0   0   0   0   0
#>              6      0   0   0   0   0   0  10   0   0   0   0   0   0   0   0   0   0   0   0
#>              7      0   0   0   0   0   0   0  11   0   0   0   0   0   0   0   0   0   0   0
#>              8      0   0   0   0   0   0   0   0  38   0   0   0   0   0   0   0   0   0   0
#>              9      0   0   0   0   0   0   0   0   0  52   0   0   0   0   0   0   0   0   0
#>              10     0   0   0   0   0   0   0   0   0   0  73   0   0   0   0   0   0   0   0
#>              11     0   0   0   0   0   0   0   0   0   0   0 113   0   0   0   0   0   0   0
#>              12     0   0   0   0   0   0   0   0   0   0   0   0 893   0   0   0   0   0   0
#>              13     0   0   0   0   0   0   0   0   0   0   0   0   0 214   0   0   0   0   0
#>              14     0   0   0   0   0   0   0   0   0   0   0   0   0   0 250   0   0   0   0
#>              15     0   0   0   0   0   0   0   0   0   0   0   0   0   0   0 122   0   0   0
#>              16     0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0 314   0   0
#>              17     0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0 136   0
#>              18     0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0 279
#>              <NA> 351   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0
#>          R6502300 (old var)
#> residence   -4    1    3   14
#>     NA    2856    0    0    0
#>     Home     0    4    0    0
#>     Hotel    0    0    1    0
#>     Other    0    0    0    6
#>       R6513700 (old var)
#> age     -5  48  49  50  51  52  53  54  55  56  57  58  59  60  61  77  80
#>   48     0   1   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0
#>   49     0   0  71   0   0   0   0   0   0   0   0   0   0   0   0   0   0
#>   50     0   0   0 332   0   0   0   0   0   0   0   0   0   0   0   0   0
#>   51     0   0   0   0 329   0   0   0   0   0   0   0   0   0   0   0   0
#>   52     0   0   0   0   0 277   0   0   0   0   0   0   0   0   0   0   0
#>   53     0   0   0   0   0   0 287   0   0   0   0   0   0   0   0   0   0
#>   54     0   0   0   0   0   0   0 281   0   0   0   0   0   0   0   0   0
#>   55     0   0   0   0   0   0   0   0 266   0   0   0   0   0   0   0   0
#>   56     0   0   0   0   0   0   0   0   0 269   0   0   0   0   0   0   0
#>   57     0   0   0   0   0   0   0   0   0   0 213   0   0   0   0   0   0
#>   58     0   0   0   0   0   0   0   0   0   0   0 224   0   0   0   0   0
#>   59     0   0   0   0   0   0   0   0   0   0   0   0 197   0   0   0   0
#>   60     0   0   0   0   0   0   0   0   0   0   0   0   0 105   0   0   0
#>   61     0   0   0   0   0   0   0   0   0   0   0   0   0   0   5   0   0
#>   77     0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   1   0
#>   80     0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   1
#>   <NA>   8   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0
#>                R6516200 (old var)
#> martial03         -5    1    3    4    5    6
#>   NA               0    0    0    0    0    0
#>   Married          0 1729    0    0    0    0
#>   Widowed          0    0  157    0    0    0
#>   Divorced         0    0    0  602    0    0
#>   Separated        0    0    0    0  106    0
#>   Never Married    0    0    0    0    0  265
#>   <NA>             8    0    0    0    0    0
#>                   R6520300 (old var)
#> schoolhusbandgrade   -5   -4   -2   -1    1    2    3    4    5    6    7    8    9   10   11
#>               -5      8    0    0    0    0    0    0    0    0    0    0    0    0    0    0
#>               <NA>    0 1178   22   35   80   49   38  509  108  191   57  291   42  242   17
#>              R6520300 (old var)
#> R6520300        -5   -4   -2   -1    1    2    3    4    5    6    7    8    9   10   11
#>   NA             0 1178   22   35    0    0    0    0    0    0    0    0    0    0    0
#>   9th            0    0    0    0   80    0    0    0    0    0    0    0    0    0    0
#>   10th           0    0    0    0    0   49    0    0    0    0    0    0    0    0    0
#>   11th           0    0    0    0    0    0   38    0    0    0    0    0    0    0    0
#>   12th           0    0    0    0    0    0    0  509    0    0    0    0    0    0    0
#>   1yr College    0    0    0    0    0    0    0    0  108    0    0    0    0    0    0
#>   2yr College    0    0    0    0    0    0    0    0    0  191    0    0    0    0    0
#>   3yr College    0    0    0    0    0    0    0    0    0    0   57    0    0    0    0
#>   4yr College    0    0    0    0    0    0    0    0    0    0    0  291    0    0    0
#>   5yr College    0    0    0    0    0    0    0    0    0    0    0    0   42    0    0
#>   6yr College    0    0    0    0    0    0    0    0    0    0    0    0    0  242    0
#>   Nondegree      0    0    0    0    0    0    0    0    0    0    0    0    0    0   17
#>   <NA>           8    0    0    0    0    0    0    0    0    0    0    0    0    0    0
#>                   R6553600 (old var)
#> schoolpartnergrade   -5   -4   -2   -1    4    5    6    7    8   11
#>        NA             0    0    0    0    0    0    0    0    0    0
#>        12th           0    0    0    0   12    0    0    0    0    0
#>        1yr College    0    0    0    0    0    1    0    0    0    0
#>        2yr College    0    0    0    0    0    0    2    0    0    0
#>        4yr College    0    0    0    0    0    0    0    1    2    0
#>        Nondegree      0    0    0    0    0    0    0    0    0    1
#>        <NA>           8 2837    2    1    0    0    0    0    0    0
#>        R7289200 (old var)
#> smoke03   -5   -4   -2   -1    0    1
#>    NA      0    0    0    0    0    0
#>    No      0    0    0    0 2288    0
#>    Yes     0    0    0    0    0  492
#>    <NA>    8   44    3   32    0    0
#>          R7289400 (old var)
#> alcohol03   -5   -4   -2    0    1
#>      NA      0    0    0    0    0
#>      No      0    0    0  386    0
#>      Yes     0    0    0    0 1096
#>      <NA>    8 1374    3    0    0
#> [1] "Variable cesd_irt_score has 20 unique values. Too large for a table."
#> [1] "Variable income03 has 20 unique values. Too large for a table."
#>                            R7329900 (old var)
#> incomehappy03                -5  -4  -2  -1   1   2   3   4   5   6   7
#>   NA                          0   0   0   0   0   0   0   0   0   0   0
#>   Extremely Happy             0   0   0   0 316   0   0   0   0   0   0
#>   Very Happy                  0   0   0   0   0 747   0   0   0   0   0
#>   Somewhat Happy              0   0   0   0   0   0 853   0   0   0   0
#>   Neither Happy nor Unhappy   0   0   0   0   0   0   0 352   0   0   0
#>   Somewhat Unhappy            0   0   0   0   0   0   0   0 260   0   0
#>   Very Unhappy                0   0   0   0   0   0   0   0   0 100   0
#>   Extremely Unhappy           0   0   0   0   0   0   0   0   0   0 100
#>   <NA>                        8  78  14  39   0   0   0   0   0   0   0
#> [1] "Variable incomeneed03 has 20 unique values. Too large for a table."
#>              R7337600 (old var)
#> school2yrcoll   -5   -4    0    1
#>          NA      0    0    0    0
#>          No      0    0   14    0
#>          Yes     0    0    0  114
#>          <NA>    8 2731    0    0
#>                   R7344600 (old var)
#> feelings03           -5   -4   -2   -1    1    2    3    4
#>   NA                  0    0    0    0    0    0    0    0
#>   Very Happy          0    0    0    0 1250    0    0    0
#>   Somewhat Happy      0    0    0    0    0 1269    0    0
#>   Somewhat Unhappy    0    0    0    0    0    0  169    0
#>   Very Unhappy        0    0    0    0    0    0    0   57
#>   <NA>                8   79    9   26    0    0    0    0
#>            R7344700 (old var)
#> volunteer03   -5   -4   -2   -1    0    1
#>        NA      0    0    0    0    0    0
#>        No      0    0    0    0 1982    0
#>        Yes     0    0    0    0    0  765
#>        <NA>    8   80    6   26    0    0
#> [1] "Variable stocks03 has 20 unique values. Too large for a table."
#> [1] "Variable bondsprivate03 has 20 unique values. Too large for a table."
#> [1] "Variable bondsgovt03 has 20 unique values. Too large for a table."
#>                 R7477700 (old var)
#> childrenroster03  -5  -4   0   1   2   3   4   5   6   7   8   9  10  11  12  13  15  18
#>             0      0   0 357   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0
#>             1      0   0   0 383   0   0   0   0   0   0   0   0   0   0   0   0   0   0
#>             2      0   0   0   0 761   0   0   0   0   0   0   0   0   0   0   0   0   0
#>             3      0   0   0   0   0 523   0   0   0   0   0   0   0   0   0   0   0   0
#>             4      0   0   0   0   0   0 324   0   0   0   0   0   0   0   0   0   0   0
#>             5      0   0   0   0   0   0   0 174   0   0   0   0   0   0   0   0   0   0
#>             6      0   0   0   0   0   0   0   0  97   0   0   0   0   0   0   0   0   0
#>             7      0   0   0   0   0   0   0   0   0  62   0   0   0   0   0   0   0   0
#>             8      0   0   0   0   0   0   0   0   0   0  36   0   0   0   0   0   0   0
#>             9      0   0   0   0   0   0   0   0   0   0   0  17   0   0   0   0   0   0
#>             10     0   0   0   0   0   0   0   0   0   0   0   0   9   0   0   0   0   0
#>             11     0   0   0   0   0   0   0   0   0   0   0   0   0   2   0   0   0   0
#>             12     0   0   0   0   0   0   0   0   0   0   0   0   0   0   3   0   0   0
#>             13     0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   1   0   0
#>             15     0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   2   0
#>             18     0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   1
#>             <NA>   8 107   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0
#>                   R7477800 (old var)
#> childreneligible03   -5   -4    0    1    2    3    4    5    7
#>               0       0    0 2006    0    0    0    0    0    0
#>               1       0    0    0  555    0    0    0    0    0
#>               2       0    0    0    0  158    0    0    0    0
#>               3       0    0    0    0    0   25    0    0    0
#>               4       0    0    0    0    0    0    6    0    0
#>               5       0    0    0    0    0    0    0    1    0
#>               7       0    0    0    0    0    0    0    0    1
#>               <NA>    8  107    0    0    0    0    0    0    0
#>            R7610300 (old var)
#> region        -5    0    1    9
#>   NA           0    0    0    2
#>   Non-south    0 1658    0    0
#>   South        0    0 1199    0
#>   <NA>         8    0    0    0