通过用dplyr-R过滤来确定未包括的观察结果

时间:2014-08-24 14:51:12

标签: r filter dataframe dplyr

在大型数据帧上使用dplyr时,我经常使用多个过滤参数。通常我可以将这些全部包含在一个filter参数中。但是,我喜欢dplyr允许您逐步思考数据处理方式的方式,因此这些过滤器通常可以连续使用。

然而,我常常不仅希望将这些连续滤波器产生的观测值保持在新的df中,而且还要保留原始df中未包含在单独df中的观测结果。

例如此数据集:

set.seed(123)
colors<- c( rep("yellow", 5), rep("blue", 5), rep("green", 5) )
shapes<- c("circle", "star", "oblong")
numbers<-sample(1:15,replace=T)
group<-sample(LETTERS, 15, replace=T)
mydf<-data.frame(colors,shapes,numbers,group)
mydf


   colors shapes numbers group
1  yellow circle       5     X
2  yellow   star      12     G
3  yellow oblong       7     B
4  yellow circle      14     I
5  yellow   star      15     Y
6    blue oblong       1     X
7    blue circle       8     S
8    blue   star      14     Q
9    blue oblong       9     Z
10   blue circle       7     R
11  green   star      15     S
12  green oblong       7     O
13  green circle      11     P
14  green   star       9     H
15  green oblong       2     D

在这里,假设我想按照以下规则进行过滤(我知道按照不同的顺序进行过滤可能更有意义,例如先按颜色进行过滤,但为了参数):

mydf %>% 
  filter (numbers <= 5 | numbers >= 12) %>% 
  filter (group=="X" | group =="Y" | group == "Z") %>% 
  filter (colors=="yellow")

返回:

  colors shapes numbers group
1 yellow circle       5     X
2 yellow   star      15     Y

我的问题是,我怎样才能将过滤器返回的原始'mydf'中的13个观测结果保存到单独的df中?有一种可爱的dplyr方式吗?

1 个答案:

答案 0 :(得分:2)

我建议

sepDf <- setdiff(mydf, mydf.filtered)