Skip to contents

Convert data.table logical columns to factors with custom labels in-place

Usage

dt_set_logical2factor(
  x,
  cols = NULL,
  labels = c("False", "True"),
  maintain_attributes = TRUE,
  fillNA = NULL
)

Arguments

x

data.table: Input data.table. Will be modified in-place.

cols

Integer or character: columns to convert, if NULL, operates on all logical columns

labels

Character: labels for factor levels

maintain_attributes

Logical: If TRUE, maintain column attributes

fillNA

Character: If not NULL, fill NA values with this constant

Value

data.table, invisibly.

Author

EDG

Examples

library(data.table)
x <- data.table(a = 1:5, b = c(TRUE, FALSE, FALSE, FALSE, TRUE))
x
#>        a      b
#>    <int> <lgcl>
#> 1:     1   TRUE
#> 2:     2  FALSE
#> 3:     3  FALSE
#> 4:     4  FALSE
#> 5:     5   TRUE
dt_set_logical2factor(x)
x
#>        a      b
#>    <int> <fctr>
#> 1:     1   True
#> 2:     2  False
#> 3:     3  False
#> 4:     4  False
#> 5:     5   True
z <- data.table(
  alpha = 1:5,
  beta = c(TRUE, FALSE, TRUE, NA, TRUE),
  gamma = c(FALSE, FALSE, TRUE, FALSE, NA)
)
# You can usee fillNA to fill NA values with a constant
dt_set_logical2factor(z, cols = "beta", labels = c("No", "Yes"), fillNA = "No")
z
#>    alpha   beta  gamma
#>    <int> <fctr> <lgcl>
#> 1:     1    Yes  FALSE
#> 2:     2     No  FALSE
#> 3:     3    Yes   TRUE
#> 4:     4     No  FALSE
#> 5:     5    Yes     NA
w <- data.table(mango = 1:5, banana = c(FALSE, FALSE, TRUE, TRUE, FALSE))
w
#>    mango banana
#>    <int> <lgcl>
#> 1:     1  FALSE
#> 2:     2  FALSE
#> 3:     3   TRUE
#> 4:     4   TRUE
#> 5:     5  FALSE
dt_set_logical2factor(w, cols = 2, labels = c("Ugh", "Huh"))
w
#>    mango banana
#>    <int> <fctr>
#> 1:     1    Ugh
#> 2:     2    Ugh
#> 3:     3    Huh
#> 4:     4    Huh
#> 5:     5    Ugh
# Column attributes are maintained by default:
z <- data.table(
  alpha = 1:5,
  beta = c(TRUE, FALSE, TRUE, NA, TRUE),
  gamma = c(FALSE, FALSE, TRUE, FALSE, NA)
)
for (i in seq_along(z)) setattr(z[[i]], "source", "Guava")
str(z)
#> Classes ‘data.table’ and 'data.frame':	5 obs. of  3 variables:
#>  $ alpha: int  1 2 3 4 5
#>   ..- attr(*, "source")= chr "Guava"
#>  $ beta : logi  TRUE FALSE TRUE NA TRUE
#>   ..- attr(*, "source")= chr "Guava"
#>  $ gamma: logi  FALSE FALSE TRUE FALSE NA
#>   ..- attr(*, "source")= chr "Guava"
#>  - attr(*, ".internal.selfref")=<externalptr> 
dt_set_logical2factor(z, cols = "beta", labels = c("No", "Yes"))
str(z)
#> Classes ‘data.table’ and 'data.frame':	5 obs. of  3 variables:
#>  $ alpha: int  1 2 3 4 5
#>   ..- attr(*, "source")= chr "Guava"
#>  $ beta : Factor w/ 2 levels "No","Yes": 2 1 2 NA 2
#>   ..- attr(*, "source")= chr "Guava"
#>  $ gamma: logi  FALSE FALSE TRUE FALSE NA
#>   ..- attr(*, "source")= chr "Guava"
#>  - attr(*, ".internal.selfref")=<externalptr>