1

我有一个数据框,其中一个变量是分类变量,并且有大量可能的值。我正在尝试以删除出现次数少于 X 的任何分类变量实例的方式处理此数据框。

例如,如果我将汽车制造商作为变量处理,它可能如下所示:

Toyota
Ford
Lexus
Ford
Acura
Subaru
Dodge
Ford
Ford
Lexus
...
...
...

我想删除汽车制造分类器出现少于十次的所有观察结果。例如,如果 Ford、Lexus 和 Toyota 出现 30、20 和 15 次,而所有其他都少于 10 次,我想删除与这些品牌相关的所有其他条目。

我知道这样的命令

cars.processed <- which(table(cars$make) > 10)

确实会产生有多少分类器符合所需标准的整数计数,但我不知道如何从那里继续前进。

谢谢你的帮助!

4

1 回答 1

1

让我们假设这DF是您的 data.frame 并且x是问题中的列并且thr是您的阈值:

thr <- 3
keep <- names(which(table(DF$x) > thr))
DF   <- DF[DF$x %in% keep, ]

# optionally, drop levels
DF$x <- droplevels(DF$x)

这也是一个 data.table 解决方案:

library(data.table)

DT <- data.table(DF)

DT[x %in% names(which(table(x)>thr))]

或者,如果您不介意根据 x 重新排序行,它会变得更加简洁

DT <- data.table(DF, key="x")

DT[.(names(which(table(x)>thr)))]
于 2013-05-14T19:57:02.450 回答