如何对数据框进行子集化,以便只包含包含其他行中显示一定数量值的列的行。
例如,如果我有一个标记为Food的列,我将如何过滤掉在整个数据框中显示少于5次的食物的所有行?
答案 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