首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用dplyr在分组tibble中只过滤特定组(满足特定条件)?

如何使用dplyr在分组tibble中只过滤特定组(满足特定条件)?
EN

Stack Overflow用户
提问于 2021-08-03 13:42:49
回答 2查看 125关注 0票数 0

以mtcar数据集为例。我想:

基于cylinders

  • within的
  1. 组表,每组测试每加仑是否有超过25英里( mpg > 25 )的
  2. ,对于那些至少有一辆mpg >25的汽车,我想移除mpg < 20

的汽车。

预期的输出是属于汽缸组的汽车,其中至少有一辆具有mpg > 25的汽车,并且它们本身具有mpg < 20,则从数据集中删除。

PS:我可以想出几种方法来解决这个问题,但是我想看看是否有人能想出一个简单而优雅的解决方案。

代码语言:javascript
复制
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)
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2021-08-03 13:48:53

也许这个?

代码语言:javascript
复制
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,则保留这些组的所有行。

票数 3
EN

Stack Overflow用户

发布于 2021-08-03 15:20:57

我们可以用

代码语言:javascript
复制
library(dplyr)
mtcars %>%
  group_by(cyl) %>%
  filter(any(mpg > 25) & mpg > 20) %>%
  ungroup
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68637173

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档