【问题标题】:Select all rows by group with condition [duplicate]使用条件按组选择所有行[重复]
【发布时间】:2019-05-30 14:51:49
【问题描述】:

我有这个数据框:

`dat <- data.frame(date = c("2017-02-23", "2017-02-22", "2017-02-15", "2017-02-05","2018-05-23", "2018-02-22"), grp = c(1,1,6,7,7,7), 
var2 = c(1,3,18,15,25,5))`

当 var2>=14 的值时,我想拥有每个组 (grp) 的所有行

预期结果:

    dat <- data.frame(date = c("2017-02-15", "2017-02-05","2018-05-23", 
"2018-02-22"), grp = c(6,7,7,7), var2 = c(18,15,25,5))

【问题讨论】:

    标签: r


    【解决方案1】:

    我们可以通过'grp'分组后在filter中使用any

    library(dplyr)
    dat %>%
        group_by(grp) %>% 
        filter(any(var2 >= 14))
    # A tibble: 4 x 3
    # Groups:   grp [2]
    #  date         grp  var2
    #  <fct>      <dbl> <dbl>
    #1 2017-02-15     6    18
    #2 2017-02-05     7    15
    #3 2018-05-23     7    25
    #4 2018-02-22     7     5
    

    或者在反向逻辑上使用all

    dat %>% 
       group_by(grp) %>% 
       filter(!all(var2 < 14))
    

    base R 中,这可以使用ave 来创建用于子集行的逻辑向量

    dat[with(dat, ave(var2 >= 14, grp, FUN = any)),]
    

    【讨论】:

    • 我今天学到了新东西!感谢您向我展示any()。 :)
    【解决方案2】:

    也许没有 groupby ,有基础 R

    dat[dat$grp %in% dat$grp [dat$var2 >= 14],]
            date grp var2
    3 2017-02-15   6   18
    4 2017-02-05   7   15
    5 2018-05-23   7   25
    6 2018-02-22   7    5
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-07-06
      • 2022-11-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-02-22
      • 1970-01-01
      • 2019-04-14
      相关资源
      最近更新 更多