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
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>