如何根据类别计数筛选数据框

时间:2011-07-22 22:01:51

标签: r filtering

如何对数据框进行子集化,以便只包含包含其他行中显示一定数量值的列的行。

例如,如果我有一个标记为Food的列,我将如何过滤掉在整个数据框中显示少于5次的食物的所有行?

3 个答案:

答案 0 :(得分:8)

这是一个简单的例子:

dat <- data.frame(x=runif(50),y=sample(letters,50,replace = TRUE))
dat[dat$y %in% names(table(dat$y))[table(dat$y) > 2],]

选择包含出现两次以上字母的所有行。

答案 1 :(得分:6)

这是使用plyr的另一种方法(可能更干净)。

ddply(dat, .(y), subset, length(x) > 2)

答案 2 :(得分:1)

对于像这样的问题,我是ave的粉丝。使用来自@joran答案的示例数据:

set.seed(21)
dat <- data.frame(x=runif(50), y=sample(letters,50,replace=TRUE))
foo <- dat[dat$y %in% names(table(dat$y))[table(dat$y) > 2],]
bar <- subset(dat, ave(rep(1,nrow(dat)), dat$y, FUN=sum) > 2)
identical(foo,bar)
# [1] TRUE