Ваш метод:
library(data.table)
set.seed(100)
mydata = data.table(x = runif(20),
type=factor(sample(c("","a","e","u"),20,replace=TRUE)))
levels(mydata$type) = list( u = "", a = "a", e = "e", u = "u")
table(mydata$type)
u a e
11 4 5
str(mydata$type)
Factor w/ 3 levels "u","a","e": 3 1 2 1 1 3 3 1 2 1 ...
Я не знаю, если использование replace
похоже на data.table, но вы по существу заменяете и отбрасываете избыточный коэффициент:
set.seed(100)
mydata = data.table(x = runif(20),
type=factor(sample(c("","a","e","u"),20,replace=TRUE)))
mydata[,type :=droplevels(replace(type,type=="","u"))]
table(mydata$type)
a e u
4 5 11
str(mydata$type)
Factor w/ 3 levels "a","e","u": 2 3 1 3 3 2 2 3 1 3 ...