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

6
请考虑以下的data.table:
x <- data.table(
          x=sample(letters[1:5],10,rep=T), 
          y=factor(sample(letters[1:5],10,rep=T), levels=letters))

这种情况在使用data.table时会多次出现,其中一些因子字段有未使用的变量。
现在,如果我们使用以下表格:
table(x)

出现了一个包含所有未使用级别的巨大表格。 在 table 方法或 data.table 中是否有办法实现这一点? 我知道以下内容是可能的:
x$y <- factor(x$y)

但这样并不实用,因为我不想把每个子表存到不同的变量中。

1
我不明白,x[, y := factor(y)]有什么问题吗? - David Arenburg
1个回答

7
您可以按照以下方式使用droplevel
x[,y:=droplevels(y)]

这个操作通过引用将 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

这与OPs的x[, y := factor(y)]有何不同?我有什么遗漏吗? - David Arenburg
2
@ David Arenburg,我完全同意。droplevels.factor就是这样做的。它调用了factor(y)。是的,你也可以使用x[, y := factor(y)]。这很可能会更快。我理解问题更多地涉及到:=,所以通过引用来进行更改。 - Rentrop

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接