通过排名有效地选择行的子集

时间:2013-07-15 16:13:22

标签: r data.table ranking

如何使用data.table按排名选择行的子集?我有一个大型数据集,我希望这样做有效。

> dt <- data.table(id=1:200, category=sample(LETTERS, 200, replace=T))
> dt[,count:=length(id), by=category]
> dt
      id category count
  1:   1        O    13
  2:   2        O    13
 ---                   
199: 170        N     3
200: 171        H     3

我想要做的是有效地将类别更改为“其他”不属于k最常见类别的类别。有点像:

dt[rank > 5,category:="OTHER", by=category]

我是data.table的新手,我不太确定如何以有效的方式获得排名。这是一种有效的方式,但看起来很笨拙。

counts <- unique(dt$count)
decision <- max(counts[rank(-counts)>5])
dt[count<=decision, category:='OTHER']

我很感激任何建议。说实话,如果没有必要,我甚至不需要“计数”栏。

0 个答案:

没有答案