首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >使用dplyr的组的不同筛选规则

使用dplyr的组的不同筛选规则
EN

Stack Overflow用户
提问于 2018-05-31 05:31:14
回答 2查看 206关注 0票数 0

示例数据:

代码语言:javascript
运行
复制
df <- data.frame(loc.id = rep(1:2, each = 11), 
             x = c(35,51,68,79,86,90,92,93,95,98,100,35,51,68,79,86,90,92,92,93,94,94))

对于每个loc.id,我想过滤掉x <= 95

代码语言:javascript
运行
复制
df %>% group_by(loc.id) %>% filter(row_number() <= which.max(x >= 95))

          loc.id   x
          <int> <dbl>
       1      1    35
       2      1    51
       3      1    68
       4      1    79
       5      1    86
       6      1    90
       7      1    92
       8      1    93
       9      1    95
      10      2    35

然而,组2的问题是所有的值都小于95。因此,我希望保留组2的所有x值。但是,上面的代码行并没有做到这一点。

EN

回答 2

Stack Overflow用户

发布于 2018-05-31 05:39:55

您可以使用match获取第一个TRUE索引,如果通过nomatch参数未找到匹配项,则返回组的长度:

代码语言:javascript
运行
复制
df %>% 
    group_by(loc.id) %>% 
    filter(row_number() <= match(TRUE, x >= 95, nomatch=n()))

# A tibble: 20 x 2
# Groups:   loc.id [2]
#   loc.id     x
#    <int> <dbl>
# 1      1    35
# 2      1    51
# 3      1    68
# 4      1    79
# 5      1    86
# 6      1    90
# 7      1    92
# 8      1    93
# 9      1    95
#10      2    35
#11      2    51
#12      2    68
#13      2    79
#14      2    86
#15      2    90
#16      2    92
#17      2    92
#18      2    93
#19      2    94
#20      2    94

或者反向cumsum作为过滤条件:

代码语言:javascript
运行
复制
df %>% group_by(loc.id) %>% filter(!lag(cumsum(x >= 95), default=FALSE))
票数 0
EN

Stack Overflow用户

发布于 2018-05-31 05:48:00

使用alldplyr包的解决方案可以实现为:

代码语言:javascript
运行
复制
library(dplyr)
df %>% group_by(loc.id) %>%
  filter((x > 95) | all(x<=95))  # All x in group are <= 95 OR x > 95

# # Groups: loc.id [2]
# loc.id     x
# <int> <dbl>
# 1      1  98.0
# 2      1 100  
# 3      2  35.0
# 4      2  51.0
# 5      2  68.0
# 6      2  79.0
# 7      2  86.0
# 8      2  90.0
# 9      2  92.0
# 10      2  92.0
# 11      2  93.0
# 12      2  94.0
# 13      2  94.0
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50613621

复制
相关文章

相似问题

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