Learn R Programming

cobalt (version 5.0.0)

var.names: Extract Variable Names from bal.tab Objects

Description

This function extracts variable names from a bal.tab object for use in specifying alternate variable names in bal.tab(), print(), format(), as.data.frame(), and love.plot(). Optionally, a file can be written for easy editing of names.

Usage

var.names(b, type, file = NULL, minimal = FALSE)

Value

If type = "vec", a character vector with the variable names as the names and the names they are displayed under as the entries.

If type = "df", a data frame with two columns called "old" and "new", the first with the variable names and the second with the names they are displayed under.

When no var.names has been applied to the object, every variable is displayed as it is stored and the two agree. When one has, the names it produced are given, so that they can be edited rather than written out again; see Details.

If file is not NULL, the output will be returned invisibly.

Arguments

b

a bal.tab object; the output of a call to bal.tab().

type

the type of output desired. Can either be "df" for a data frame or "vec" for a named vector. See "Value". The default is "vec" unless file is not NULL.

file

optional; a file name to save the output if type = "df". See utils::write.csv(), which var.name() calls. Must end in .csv.

minimal

whether the output should contain all variable names (i.e., all rows that appear the output of bal.tab()) or just the unique base variables. See "Details".

Details

The purpose of the function is to make supplying new variable names to the var.names argument easier. Rather than manually creating a vector or data frame with all the variable names that one desires to change, one can use var.names() to extract variable names from a bal.tab object and edit the output. Importantly, the output can be saved to a CSV file, which can be easily edited and read back into R, as demonstrated in the Example. See display-options for what var.names does and for the structures it accepts.

When minimal = TRUE, only a minimal set of variables will be output. For example, if the variables analyzed in bal.tab() are age, race, and married, and int = TRUE in bal.tab(), many variables will appear in the output, including expansions of the factor variables, the polynomial terms, and the interactions. Rather than renaming all of these variables individually, one can rename just the three base variables, and all variables that arise from them will be accordingly renamed. Setting minimal = TRUE requests only these base variables.

If a var.names was given in the call to bal.tab(), the names it produced are what is returned, so that a set of names arrived at once can be edited rather than written out again. Passing the result back to any of the functions that take var.names reproduces the names it came from, because the old names it is keyed by are the ones the variables are stored under, which var.names never changes.

Which names an edit then reaches follows from minimal, as it does for any var.names: an edit to a base variable in the minimal output reaches every name that variable appears in, while an edit to an entry of the full output changes only the name it is an entry for.

See Also

display-options for var.names, the argument this function supplies

Examples

Run this code
data(lalonde, package = "cobalt")

b1 <- bal.tab(treat ~ age + race + married, data = lalonde,
              int = TRUE)
v1 <- var.names(b1, type = "vec", minimal = TRUE)
v1["age"] <- "Age (Years)"
v1["race"] <- "Race/Eth"
v1["married"] <- "Married"

love.plot(b1, var.names = v1, factor_sep = ": ")

#The same names in the table, set once in `bal.tab()`
b1 <- bal.tab(treat ~ age + race + married, data = lalonde,
              int = TRUE, var.names = v1)
b1

#They come back out to be edited rather than rewritten
v1 <- var.names(b1, type = "vec", minimal = TRUE)
v1

v1["married"] <- "Married at baseline"
print(b1, var.names = v1)
if (FALSE) {
b2 <- bal.tab(treat ~ age + race + married + educ + nodegree +
                  re74 + re75 + I(re74==0) + I(re75==0), 
              data = lalonde)
var.names(b2, file = "varnames.csv")

##Manually edit the CSV (e.g., in Excel), then save it.
v2 <- read.csv("varnames.csv")
love.plot(b2, var.names = v2)
}

Run the code above in your browser using DataLab