Фильтр dplyr по значению, только если в группе в том же столбце существует другое значение - PullRequest
0 голосов
/ 03 февраля 2019

Я полностью ожидаю, что меня отбросят за дубликат вопроса, но я просто не смог найти подобный вопрос.Заранее извиняюсь.

Я пытаюсь очистить некоторые данные, которые иногда содержат итоговую строку, а иногда нет.Вот небольшой воспроизводимый пример:

library(tidyverse)

yr <- c(2010, 2010, 2010,
        2011, 2011, 2011, 2011,
        2012, 2012, 2012)

a <- c("HAY", "APPLES", "PUMPKINS",
       "HAY", "HAY & HAYLAGE", "APPLES", "PUMPKINS",
       "HAY & HAYLAGE", "APPLES", "PUMPKINS")

b <- c(1:10)

dat <- as_tibble(list(yr = yr, a = a, b = b))

dat %>% 
  group_by(yr) %>% 
  filter(a != "HAY" if group contains a== "HAY & HAYLAGE")

очевидно, что последняя строка кода является псевдокодом.В группе за год = 2011 я хочу отфильтровать строку, где равно "HAY".В результате у меня будет 9 строк.

1 Ответ

0 голосов
/ 03 февраля 2019

Вот один из способов сделать это - вы можете просто использовать оператор if внутри условия фильтра:

library(dplyr) 

# (data from OP) 
dat <- dplyr::tibble(
  yr = c(2010, 2010, 2010, 2011, 2011, 
         2011, 2011, 2012, 2012, 2012),
  a = c("HAY", "APPLES", "PUMPKINS", "HAY", "HAY & HAYLAGE", 
        "APPLES", "PUMPKINS", "HAY & HAYLAGE", "APPLES", "PUMPKINS"), 
  b = 1:10
)


dat %>% 
  group_by(yr) %>% 
  filter(if ('HAY & HAYLAGE' %in% a) a!='HAY' else TRUE) %>% 
  ungroup()

## result will be: 
## 
## # A tibble: 9 x 3
##      yr a                 b
##   <dbl> <chr>         <int>
## 1  2010 HAY               1
## 2  2010 APPLES            2
## 3  2010 PUMPKINS          3
## 4  2011 HAY & HAYLAGE     5
## 5  2011 APPLES            6
## 6  2011 PUMPKINS          7
## 7  2012 HAY & HAYLAGE     8
## 8  2012 APPLES            9
## 9  2012 PUMPKINS         10
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...