如何使用data.table删除表中未使用的级别?

Sha*_*bho 5 r data.table

请考虑以下事项data.table:

x <- data.table(
          x=sample(letters[1:5],10,rep=T), 
          y=factor(sample(letters[1:5],10,rep=T), levels=letters))
Run Code Online (Sandbox Code Playgroud)

data.table在使用某些因子字段具有未使用变量的s时,会出现这种情况.

现在,如果我们使用下表:

table(x)
Run Code Online (Sandbox Code Playgroud)

一张包含所有未使用级别的巨型桌子出现了.方法中有没有table方法或data.table这样做?

我知道以下是可能的:

x$y <- factor(x$y)
Run Code Online (Sandbox Code Playgroud)

但这没用,因为我不想将每个子表保存到不同的变量.

Ren*_*rop 6

您可以使用droplevel如下

x[,y:=droplevels(y)]
Run Code Online (Sandbox Code Playgroud)

y通过引用覆盖droplevels(y)

结果是

> table(x)
   y
x   b c d e
  a 1 1 1 2
  b 0 1 0 0
  c 1 0 0 0
  d 1 0 0 0
  e 0 0 2 0
Run Code Online (Sandbox Code Playgroud)

  • @大卫阿伦堡,我完全同意。`droplevels.factor` 就是这样做的。它称为“因子(y)”。是的,您也可以执行 `x[, y := Factor(y)]`。这很可能更快。我知道问题更多是关于 `:=` 所以通过引用更改它。 (2认同)