rbindlist表示缺少级别的因素

sha*_*dow 6 r data.table

data.tables想要几个rbindlist.这些表包含具有(可能缺失)级别的因素.然后rbindlist(...)表现不同于do.call(rbind(...)):

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

rbindlist(list(dt1, dt1))[,x] 
## [1] a b a b
## Levels: a b

do.call(rbind, 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
Run Code Online (Sandbox Code Playgroud)

如果我想保持水平,我rbind是否有data.table办法或有办法吗?

ags*_*udy 4

我想rbindlist更快,因为它不进行检查do.call(rbind.data.frame,...)

为什么绑定后不设置级别呢?

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

来自?setattr

setattr() 在许多情况下通过引用设置属性很有用,并且可以用于任何对象或对象的一部分,而不仅仅是 data.tables。

  • @shadow我猜如果你有大量的行和更多的因子级别,那么速度只会更慢,在这种情况下我会问 - 拥有因子有什么意义?仅当我有少量元素在数据中反复使用且重复程度较高时,我才会使用因子 (2认同)