在大型数据帧上使用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方式吗?
答案 0 :(得分:2)
我建议
sepDf <- setdiff(mydf, mydf.filtered)