Условное поднабор из фрейма данных с несколькими условиями - PullRequest
3 голосов
/ 09 апреля 2020

В моем data.frame ниже, я хочу поднастроить все строки, для которых group == 0 И все 3 года 2017, 2018 и 2019 также включены.

Желаемый вывод в приведенном ниже примере приведена информация о строках 4, 5 и 6.

Я попробовал следующее решение безуспешно. Есть ли быстрое исправление в BASE R ?

dat <- data.frame(group = c(0,0,1, 0,0,0, 1, 1, 1), 
       year = rep(2017:2019, 3))

subset(dat, group == 0 & year == 2017 & year == 2018 & year == 2019)

1 Ответ

2 голосов
/ 09 апреля 2020

Если ОП хотел обработать 'группу' рядом с уникальным

library(dplyr)
library(data.table)
dat %>%
   group_by(grp = rleid(group)) %>%
   filter(all(2017:2019 %in% year), group == 0) %>%
   ungroup %>%
   select(-grp)
# A tibble: 3 x 2
#  group  year
#  <dbl> <int>
#1     0  2017
#2     0  2018
#3     0  2019

Или в base R с rle

grp <- with(rle(dat$group), rep(seq_along(values), lengths))
subset(dat, as.logical(ave(year,  grp, FUN = 
    function(x) all(2017:2019 %in% x)) ) & group == 0)
#  group year
#4     0 2017
#5     0 2018
#6     0 2019
...