# tools

    library(thinkr)

## replace_pattern(): Replace all occurencies of a `pattern` by `replacement`

Scan a dataframe and return it with all occurencies of a `pattern` changed to `replacement`, keeping the same format.

    dataset <- data.frame(
      col_a = as.factor(letters)[1:7],
      col_b = letters[1:7],
      col_c = 1:7,
      col_d = paste0(letters[1:7], letters[1:7]),
      stringsAsFactors = FALSE)

    # Show original dataset
    dataset
    #>   col_a col_b col_c col_d
    #> 1     a     a     1    aa
    #> 2     b     b     2    bb
    #> 3     c     c     3    cc
    #> 4     d     d     4    dd
    #> 5     e     e     5    ee
    #> 6     f     f     6    ff
    #> 7     g     g     7    gg

    # replace pattern
    replace_pattern(dataset, "a", 'XXX-')
    #>   col_a col_b col_c    col_d
    #> 1  XXX-  XXX-     1 XXX-XXX-
    #> 2     b     b     2       bb
    #> 3     c     c     3       cc
    #> 4     d     d     4       dd
    #> 5     e     e     5       ee
    #> 6     f     f     6       ff
    #> 7     g     g     7       gg

Exact matching with argument `exact`

    replace_pattern(dataset, "a", 'XXX-', exact = TRUE)
    #>   col_a col_b col_c col_d
    #> 1  XXX-  XXX-     1    aa
    #> 2     b     b     2    bb
    #> 3     c     c     3    cc
    #> 4     d     d     4    dd
    #> 5     e     e     5    ee
    #> 6     f     f     6    ff
    #> 7     g     g     7    gg

## is_likert(): Verify levels of a factor vector

Test that the levels of a factor `vec` are all to be found in the character vector `lev`.

    ## returns TRUE because all levels of iris$species are in c("setosa", "versicolor", "virginica")
    is_likert(iris$Species, c("setosa", "versicolor", "virginica"))
    #> [1] TRUE

    ## returns TRUE because all levels of iris$species are in c("setosa", "versicolor", "virginica", "banana"), even though there is actually no level "banana"
    # A message is printed
    is_likert(iris$Species, c("setosa", "versicolor", "virginica", "banana"))
    #> At least one element of lev is not in levels of vec
    #> [1] TRUE

    ## returns FALSE because the "virginica" level of iris$species is missing
    is_likert(iris$Species, c("setosa", "versicolor"))
    #> [1] FALSE

    ## returns an error
    is_likert(iris$Species, c(1, 2))
    #> Error: Elements 1 of is.character(lev) are not true

    ## returns no error as the numeric is coerced to a character.
    is_likert(iris$Species, c("setosa", 2))
    #> At least one element of lev is not in levels of vec
    #> [1] FALSE

> Warnings: is-likert does not test whether the levels of `vec` are a likert scale as in psychometry. See https://en.wikipedia.org/wiki/Likert_scale for example.