【问题标题】:Strange filter behavior in dplyrdplyr 中的奇怪过滤器行为
【发布时间】:2015-04-28 12:34:39
【问题描述】:

考虑以下dataset

为什么我在做的时候会得到不同的结果:

library(dplyr)
df %>% 
  filter(!(w >= 1 | lag(w >= 1, default = F))) %>% 
  filter(lag(t, default = T) != t) %>%
  summarise(median = median(r), mad = mad(r))

结果:

  median      mad
1    664 142.3296

df %>% 
  filter(!(w >= 1 | lag(w >= 1, default = F)), 
         lag(t, default = T) != t) %>%
  summarise(median = median(r), mad = mad(r))

这给出了:

  median      mad
1    671 152.7078

【问题讨论】:

  • 我猜,在第一种情况下,第二个过滤器适用于已过滤的数据,但在第二种情况下,lag(t, default=T) 正在处理原始数据集。因此,您将分别获得 8997 行。
  • 这两种过滤观察结果的不同方法会给出不同的 data.frames 来计算中值和 mad。 %>% 应该读作“then”。因此,在第一种情况下,您使用第一个条件 filter(!(w >= 1 | lag(w >= 1, default = F))) 过滤掉与过滤器不匹配的所有内容,然后过滤第二个条件。在第二种情况下,它是一个大过滤器。

标签: r dplyr


【解决方案1】:

见上面的cmets,还有:http://cran.rstudio.com/web/packages/dplyr/vignettes/introduction.html

filter() 允许您选择数据框行的子集。

...

filter()subset() 的工作方式类似,只是您可以为其提供任意数量的过滤条件,这些条件与& 结合在一起(不是&&,这很容易意外做到!)。您可以显式使用其他布尔运算符: filter(flights, month == 1 | month == 2)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-07-28
    • 1970-01-01
    • 2021-07-21
    相关资源
    最近更新 更多