我有一些想要data.tablesrbindlist。该表包含具有(可能缺少)水平的因素。然后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

如果我想保持水平,我是否可以求助于rbind还是有一种data.table方式?

最佳答案

我猜rbindlist更快,因为它不检查do.call(rbind.data.frame,...)
绑定(bind)后为什么不设置水平?

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

?setattr:

关于缺少水平的因素的rbindlist,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/19451090/

10-12 14:02