protect_integer_cols will prepend an 'X' to column names that are bare integers to protect them from being misinterpreted during sensitive operations (see below). unprotect_integer_cols will reverse the effect, reverting the column names to their original form.

protect_integer_cols(d)

unprotect_integer_cols(d)

Arguments

d

The data to have integer column names protected or unprotected

Value

Tibble with the integer column names protected

Details

Some of our data frames have column names that are years, such as "2005". In some cases a column name of this form can be misinterpreted as a column index, the (likely nonexistent) 2005th column in this example. The *_if functions in dplyr are examples of such circumstances. Protecting the column names with a leading character allows these functions to perform normally.

Much of the data system is expecting years in column names to be bare integers; therefore, you should unprotect the column names as soon as the sensitive operations are complete.

Examples

library(magrittr)
df <- dplyr::tibble(iso=c('bad','dum'), `2005`=c(123.45, NA), `2050`=c(867, 5309))
protect_integer_cols(df) %>%
    dplyr::select_if(function(col) {!any(is.na(col))}) %>%
    unprotect_integer_cols
#> # A tibble: 2 × 2
#>   iso   `2050`
#>   <chr>  <dbl>
#> 1 bad      867
#> 2 dum     5309