根据条件按组选择所有行

时间:2019-05-30 14:51:49

标签: r

我有这个数据框:

`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))

2 个答案:

答案 0 :(得分:2)

按“ grp”分组后,我们可以在any中使用filter

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)),]

答案 1 :(得分:1)

也许不带groupby,且底数为

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