Неожиданный вывод из фильтрации нескольких условий с фильтром dplyr - PullRequest
0 голосов
/ 02 мая 2019

У меня есть фрейм данных с 3 переменными: report_epiweek, report_epiyear и Freq_case.

library(dplyr)
library(ggplot2)    
mydata<-data.frame(report_epiweek=c(1,2,3,4,5,6,7,8,9,10,1,2,3,4,5,6,7,8,9,10), 
                       report_epiyear=c(2018,2018,2018,2018,2018,2018,2018,2018,2018,2018,2019,2019,2019,2019,2019,2019,2019,2019,2019,2019), 
                       Freq_case=c(0,0,0,0,0,0,2,6,2,3,4,5,7,8,34,2,0,6,3,1))

Я хотел бы создать гистограмму, используя ggplot2. Я хочу отфильтровать недели с 0 значениями с 2018 года (недели с 1 по 6). Насколько я понимаю, функция фильтра заключалась в том, что вы можете фильтровать строки на основе нескольких условий (от https://suzan.rbind.io/2018/02/dplyr-tutorial-3/):

Фильтрация на основе нескольких условий Приведенные выше примеры возвращают строки на основе одного условия, но опция фильтра также допускает фильтры в стиле AND и OR:

фильтр (условие 1, условие 2) будет возвращать строки, в которых выполняются оба условия.

фильтр (условие1,! Условие2) вернет все строки, где условие одно является истинным, а условие 2 - нет.

фильтр (условие 1 | условие 2) будет возвращать строки, в которых выполняется условие 1 и / или условие 2.

фильтр (xor (условие1, условие2) вернет все строки, в которых выполняется только одно из условий, а не при выполнении обоих условий.

mydata %>% 
  mutate(report_epiweek=as.numeric(report_epiweek)) %>% 
  filter(!Freq_case==0 & report_epiyear==2018) %>%
  ggplot(aes(x=report_epiweek, y=Freq_case))+
  geom_col()+
  ggtitle("EpiCurve") + 
  facet_grid(. ~ report_epiyear)+ 
  theme_bw()+ 
  theme(axis.text.x = element_text(angle = 90), legend.position = "bottom", legend.title = element_text(color = "black", size = 8))

Это дает следующий график. epicurve

Похоже, что фильтр отфильтровывает все записи, у которых report_epiyear равен 2018, но я хочу иметь график, где отфильтрованные записи имеют те, которые имеют Freq_case 0 и находятся в 2018. Это оставило бы мой Freq_case 0 в 2019 году нетронутым. (и я смогу увидеть другие значения 2018 года).

Я не уверен, что просто не понимаю, как использовать фильтр. Любая помощь будет высоко ценится.

Ответы [ 2 ]

0 голосов
/ 17 мая 2019

Добавьте это внутри фасета.

facet_grid(~ report_epiyear, scales = "free", space = "free" )

0 голосов
/ 02 мая 2019

!, как вы написали, относится только к первому аргументу (Freq==0).Добавьте скобки вокруг двух компонентов условного выражения &, чтобы они были объединены, прежде чем инвертировать его с помощью !.

mydata %>% 
  mutate(report_epiweek=as.numeric(report_epiweek)) %>% 
  filter(!(Freq==0 & report_epiyear==2018)) %>%
  ggplot(aes(x=report_epiweek, y=Freq))+
  geom_col()+
  ggtitle("EpiCurve") + 
  facet_grid(. ~ report_epiyear)+ 
  theme_bw()+ 
  theme(axis.text.x = element_text(angle = 90), legend.position = "bottom", legend.title = element_text(color = "black", size = 8))

EpiCurve Plot

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...