我有一个数据框,其中一个变量是分类的,并且具有大量可能的值。我试图以一种方式处理这个数据框,删除任何少于X次的分类变量实例。
例如,如果我将汽车品牌作为变量处理,它可能看起来像:
Toyota
Ford
Lexus
Ford
Acura
Subaru
Dodge
Ford
Ford
Lexus
...
...
...
我想删除汽车制造分类器的次数少于十次的所有观察结果。例如,如果福特,雷克萨斯和丰田出现了30次,20次和15次,而其他所有出现的次数都少于10次,我想删除与这些品牌相关的所有其他条目。
我知道像
这样的命令cars.processed <- which(table(cars$make) > 10)
会产生一个整数计数,表明有多少分类符符合要求的标准,但我不知道如何从那里继续前进。
感谢您的帮助!
答案 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)))]