根据出现次数从数据集中清除观察结果

时间:2013-05-14 19:46:36

标签: r

我有一个数据框,其中一个变量是分类的,并且具有大量可能的值。我试图以一种方式处理这个数据框,删除任何少于X次的分类变量实例。

例如,如果我将汽车品牌作为变量处理,它可能看起来像:

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

我想删除汽车制造分类器的次数少于十次的所有观察结果。例如,如果福特,雷克萨斯和丰田出现了30次,20次和15次,而其他所有出现的次数都少于10次,我想删除与这些品牌相关的所有其他条目。

我知道像

这样的命令
cars.processed <- which(table(cars$make) > 10)

会产生一个整数计数,表明有多少分类符符合要求的标准,但我不知道如何从那里继续前进。

感谢您的帮助!

1 个答案:

答案 0 :(得分: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)))]