Skip to contents

Makes syntactically valid column names out of character vectors. Replaces invalid characters with underscores.

Usage

valid_names(x, unique = TRUE, lowercase = TRUE, words = NULL, n_rounds = 2)

Arguments

x

A character vector.

unique

TRUE or FALSE. If TRUE, it returns unique names for the case of duplicates.

lowercase

TRUE or FALSE. If TRUE, it converts text to lower case.

words

A named character vector or NULL. Use this to replace invalid characters with selected values. The names are the symbols to replace (for example: @, $, %, &, etc.), and the values are their words. Default value of NULL removes invalid characters or converts them to underscores.

n_rounds

An integer for the number of rounds needed to fix duplicates.

Value

character vector.

See also

Examples

#----------------------------------------------------------------------------
# valid_names() examples.
#----------------------------------------------------------------------------
library(bkmisc)

d <- data.frame(
  `BaD nAmE_/*iS#^baD  ` = c(1, 2, 3),
  good_name_is_good = c(4, 5, 6),
  check.names = FALSE
)
names(d)
#> [1] "BaD nAmE_/*iS#^baD  " "good_name_is_good"   
valid_names(names(d))
#> [1] "bad_name_is_bad"   "good_name_is_good"
names(d) <- valid_names(names(d))
names(d)
#> [1] "bad_name_is_bad"   "good_name_is_good"

d <- data.frame(
  `BaD nAmE_/*iS#^baD  ` = c(1, 2, 3),
  good_name_is_good = c(4, 5, 6),
  check.names = FALSE
)
valid_names(
  x = names(d),
  words = setNames(
    c(
      "_at_", "_dollars_", "_percent_", "_and_", "_per_", "_geq_", "_geq_",
      "_greaterthan_", "_leq_", "_leq_", "_lessthan_"
    ),
    c("@", "$", "%", "&", "/", "≥", ">=", ">", "≤", "<=", "<")
  )
)
#> [1] "bad_name_per_is_bad" "good_name_is_good"