我有这个数据框:
`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))
答案 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