view raw
shadow shadow - 6 months ago 39
R Question

rbindlist for factors with missing levels

I have several

that I would like to
. The tables contain factors with (possibly missing) levels. Then
behaves differently from

dt1 <- data.table(x=factor(c("a", "b"), levels=letters))

rbindlist(list(dt1, dt1))[,x]
## [1] a b a b
## Levels: a b, list(dt1, dt1))[,x]
## [1] a b a b
## Levels: a b c d e f g h i j k l m n o p q r s t u v w x y z

If I want to keep the levels, do I have tor resort to
or is there a


I guess rbindlist is faster because it doesn't do the checking of,...)

Why not to set the levels after binding?

    Dt <- rbindlist(list(dt1, dt1)) 
    setattr(Dt$x,"levels",letters)  ## set attribute without a copy

from the ?setattr:

setattr() is useful in many situations to set attributes by reference and can be used on any object or part of an object, not just data.tables.