按交叉表的单元格大小过滤整洁数据

时间:2014-12-09 00:40:25

标签: r

给定一个整洁的数据集,例如mtcars的这个子集:

library(dplyr)
x <- mtcars %>% select(cyl, gear)
head(x)
##                   cyl gear
## Mazda RX4           6    4
## Mazda RX4 Wag       6    4
## Datsun 710          4    4
## Hornet 4 Drive      6    3
## Hornet Sportabout   8    3
## Valiant             6    3

我想要拟合一个线性模型,忽略观察太少的细胞。所以在交叉表中:

library(tidyr)
x %>% group_by(cyl, gear) %>% summarize(n = n()) %>% spread(cyl, n)
## Source: local data frame [3 x 4]
## 
##   gear 4 6  8
## 1    3 1 2 12
## 2    4 8 4 NA
## 3    5 2 1  2

我想过滤掉

所有的行
  • gear == 3 & cyl %in% c(4, 6)
  • gear == 4 & cyl == 8
  • gear == 5

并最终得到原始整洁形式的数据集。

如何通过过滤单元格大小而不是齿轮/圆柱值来完成?

注意:欢迎任何解决方案,不仅限于dplyr / tidyr等。

1 个答案:

答案 0 :(得分:1)

如果您只是想使用基础R,您可以获得所有具有超过2个观测值的气缸/齿轮组合

subset(mtcars,
    ave(cyl, cyl, gear, FUN=length)>2)