r语言 - 如何过滤内部只有某些组(满足特定条件)在分组标题,使用dplyr?



以mtcars数据集为例。我想:

  1. 基于气缸数的分组表
  2. 在每组中测试是否有任何汽车每加仑行驶里程高于25英里/加仑;25)
  3. 仅适用于至少有一辆mpg>我要把有mpg的车卸下来。20

期望的输出是属于一个汽缸组的汽车,其中至少有一辆其他汽车具有mpg>25、自己也有MPG<从数据集>

中删除20个PS:我可以想到几个方法来解决这个问题,但我想看看是否有人能提出一个简单而优雅的解决方案,例如

xx <- split (mtcars, f = mtcars$cyl)
for (i in seq_along (xx)){
if (any (xx[[i]]$mpg) > 25) xx[[i]] <- filter (xx[[i]] > 20)
}
xx <- bind_rows (xx)

也许这个?

library(dplyr)
mtcars %>%
group_by(cyl) %>%
filter(if(any(mpg > 25)) mpg > 20 else TRUE) %>%
ungroup
#     mpg   cyl  disp    hp  drat    wt  qsec    vs    am  gear  carb
#   <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
# 1  21       6  160    110  3.9   2.62  16.5     0     1     4     4
# 2  21       6  160    110  3.9   2.88  17.0     0     1     4     4
# 3  22.8     4  108     93  3.85  2.32  18.6     1     1     4     1
# 4  21.4     6  258    110  3.08  3.22  19.4     1     0     3     1
# 5  18.7     8  360    175  3.15  3.44  17.0     0     0     3     2
# 6  18.1     6  225    105  2.76  3.46  20.2     1     0     3     1
# 7  14.3     8  360    245  3.21  3.57  15.8     0     0     3     4
# 8  24.4     4  147.    62  3.69  3.19  20       1     0     4     2
# 9  22.8     4  141.    95  3.92  3.15  22.9     1     0     4     2
#10  19.2     6  168.   123  3.92  3.44  18.3     1     0     4     4
# … with 22 more rows

mpg中至少有一个值大于25的组中,我们只保留值大于20的行。如果一个组的值不大于25,则保留这些组的所有行。

我们可以使用

library(dplyr)
mtcars %>%
group_by(cyl) %>%
filter(any(mpg > 25) & mpg > 20) %>%
ungroup

最新更新