【问题标题】:determine observations not included by filtering with dplyr - R确定不通过使用 dplyr - R 过滤的观察结果
【发布时间】:2014-10-17 20:05:30
【问题描述】:

在大型数据帧上使用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 方式?

【问题讨论】:

  • sepDf &lt;- setdiff(mydf, mydf.filtered)?
  • anti_join 可能有用吗?
  • @lukeA - 这两种解决方案都运作良好。我认为 setdiff 稍微好一点,因为它保持行顺序。 - 你能发布一个答案让我打勾吗?

标签: r filter dataframe dplyr


【解决方案1】:

我建议

sepDf <- setdiff(mydf, mydf.filtered)

【讨论】:

    猜你喜欢
    • 2014-11-17
    • 1970-01-01
    • 2020-09-27
    • 2016-02-11
    • 2017-07-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-06-12
    相关资源
    最近更新 更多