keyTemplate {kutils} | R Documentation |
Create variable key template (in memory or in a file)
Description
A variable key is a human readable document that describes the variables in a data set. A key can be revised and re-imported by R to recode data. This might also be referred to as a "programmable codebook." This function inspects a data frame, takes notice of its variable names, their classes, and legal values, and then it creates a table summarizing that information. The aim is to create a document that principal investigators and research assistants can use to keep a project well organized. Please see the vignette in this package.
Usage
keyTemplate(
dframe,
long = FALSE,
sort = FALSE,
file = NULL,
max.levels = 15,
missings = NULL,
missSymbol = ".",
safeNumericToInteger = TRUE,
trimws = "both",
varlab = FALSE
)
Arguments
dframe |
A data frame |
long |
Default FALSE. |
sort |
Default FALSE. Should the rows representing the variables be sorted alphabetically? Otherwise, they appear in the order in which they were included in the original dataset. |
file |
DEFAULT NULL, meaning no file is produced. Choose a file name ending in either "csv" (for comma separated variables), "xlsx" (compatible with Microsoft Excel), or "rds" (R serialization data). The file name will be used to select among the 3 storage formats. XLSX output requires the openxlsx package. |
max.levels |
How high is the limit on the number of values for discrete (integer, character, and Date) variables? Default = 15. If observed number exceeds max.levels, we conclude the author should not assign new values in the key and only the missing value will be included in the key as a "placeholder". This does not affect variables declared as factor or ordered variables, for which all levels are included in all cases. |
missings |
Values in exising data which should be treated as
missing in the new key. Character string in format acceptable
to the |
missSymbol |
Default ".". A character string used to
represent missing values in the key that is created. Relevant
(mostly) for the key's |
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 |
trimws |
Default is "both", user can change to "left", "right", or set as NULL to avoid any trimming. |
varlab |
A key can have a companion data structure for
variable labels. Default is FALSE, but the value may also be
TRUE or a named vector of variable labels, such as
|
Details
The variable key can be created in two formats, wide and long. The original style of the variable key, wide, has one row per variable. It has a style for compact notation about current values and required recodes. That is more compact, probably easier for experts to read, but perhaps more difficult to edit. The long style variable key has one row per value per variable. Thus, in a larger project, the long key can have many rows. However, in a larger project, the long style key is easier to edit with a spread sheet program.
After a key is created, it should be re-imported into R with the
kutils::keyImport
function. Then the key structure can
guide the importation and recoding of the data set.
Concerning the varlab attribute. Run attr(key, "varlab"
to
review existing labels, if any.
Storing the variable labels in files requires some care because
the rds
, xlsx
, and csv
formats have different
capabilities. The rds
storage format saves all attributes without
difficulty. In contrast, because csv
and xlsx
do not save
attributes, the varlabs are stored as separate character
matrices. For xlsx
files, the varlab object is saved as a second
sheet in xlsx
file, while in csv
a second file suffixed
"-varlab.csv" is created.
Value
A key in the form of a data frame. May also be saved on disk if the file argument is supplied. The key may have an attribute "varlab", variable labels.
Author(s)
Paul Johnson <pauljohn@ku.edu>
Examples
set.seed(234234)
N <- 200
mydf <- data.frame(x5 = rnorm(N),
x4 = rpois(N, lambda = 3),
x3 = ordered(sample(c("lo", "med", "hi"),
size = N, replace=TRUE),
levels = c("med", "lo", "hi")),
x2 = letters[sample(c(1:4,6), N, replace = TRUE)],
x1 = factor(sample(c("cindy", "bobby", "marcia",
"greg", "peter"), N,
replace = TRUE)),
x7 = ordered(letters[sample(c(1:4,6), N, replace = TRUE)]),
x6 = sample(c(1:5), N, replace = TRUE),
stringsAsFactors = FALSE)
mydf$x4[sample(1:N, 10)] <- 999
mydf$x5[sample(1:N, 10)] <- -999
## Note: If we change this example data, we need to save a copy in
## "../inst/extdata" for packacing
dn <- tempdir()
write.csv(mydf, file = file.path(dn, "mydf.csv"), row.names = FALSE)
mydf.templ <- keyTemplate(mydf, file = file.path(dn, "mydf.templ.csv"),
varlab = TRUE)
mydf.templ_long <- keyTemplate(mydf, long = TRUE,
file = file.path(dn, "mydf.templlong.csv"),
varlab = TRUE)
mydf.templx <- keyTemplate(mydf, file = file.path(dn, "mydf.templ.xlsx"),
varlab = TRUE)
mydf.templ_longx <- keyTemplate(mydf, long = TRUE,
file = file.path(dn, "mydf.templ_long.xlsx"),
varlab = TRUE)
## Check the varlab attribute
attr(mydf.templ, "varlab")
mydf.tmpl2 <- keyTemplate(mydf,
varlab = c(x5 = "height", x4 = "age",
x3 = "intelligence", x1 = "Name"))
## Check the varlab attribute
attr(mydf.tmpl2, "varlab")
## Try with the national longitudinal study data
data(natlongsurv)
natlong.templ <- keyTemplate(natlongsurv,
file = file.path(dn, "natlongsurv.templ.csv"),
max.levels = 15, varlab = TRUE, sort = TRUE)
natlong.templlong <- keyTemplate(natlongsurv, long = TRUE,
file = file.path(dn, "natlongsurv.templ_long.csv"), sort = TRUE)
if(interactive()) View(natlong.templlong)
natlong.templlong2 <- keyTemplate(natlongsurv, long = TRUE,
missings = "<0", max.levels = 50, sort = TRUE,
varlab = TRUE)
if(interactive()) View(natlong.templlong2)
natlong.templwide2 <- keyTemplate(natlongsurv, long = FALSE,
missings = "<0", max.levels = 50, sort = TRUE)
if(interactive()) View(natlong.templwide2)
all.equal(wide2long(natlong.templwide2), natlong.templlong2)
head(keyTemplate(natlongsurv, file = file.path(dn, "natlongsurv.templ.xlsx"),
max.levels = 15, varlab = TRUE, sort = TRUE), 10)
head(keyTemplate(natlongsurv, file = file.path(dn, "natlongsurv.templ.xlsx"),
long = TRUE, max.levels = 15, varlab = TRUE, sort = TRUE), 10)
list.files(dn)