Код для фильтрации данных, когда наблюдения могут присутствовать или не присутствовать в кадре данных - PullRequest
0 голосов
/ 03 февраля 2019

Я пытаюсь сделать шаблон кода для фильтрации данных.Проблема, с которой я сталкиваюсь, состоит в том, что существуют различные уровни категориальных данных, и если я использую функцию dplyr, фильтр R не возвращает данных, если уровень фильтрации не был в данных.

Например:

library(dplyr)

lease   <-c(1,2,1)
year<-c(2010,2011,2010)
beg <-c(1,2,1)
gas<-c(1,2,2)
pelelts<-c(1,2,2)
df<-data.frame(lease, year, beg, gas, pelelts)

df%>%
 mutate_all(as.character)%>%
 filter(lease==1 | year==2010)%>%
 filter(beg==1 & gas==2)%>%
 filter(pelelts==3)

возвращает <0 строк> (или 0-длины строк.имений), что, как я считаю, связано с тем, что pelelts == 3 не существует (и яполучить данные, если я удалю эту строку кода).У меня проблема в том, что я не хочу проверять каждый набор данных на предмет того, что там есть, так как оно будет варьироваться в зависимости от подмножества.Любая помощь будет высоко ценится.

Ответы [ 2 ]

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

Этот код получил требуемый результат благодаря @ H5470

df%>%
mutate_all(as.character)%>%
filter(lease==1 | year==2010)%>%
filter(beg==1 & gas==2)%>%
mutate(pelelts=case_when(pelelts %in% '3'~ '3',
                       pelelts %in% c('0', '1', '2')~ '',
                       TRUE~as.character(pelelts)))

, возвращая:

lease year beg gas pelelts
   1 2010   1   2 
0 голосов
/ 03 февраля 2019

Говоря pelelts == 3, вы говорите R, что вы только хотите 3. Вам нужно изменить свой код, чтобы перехватить другие приемлемые условия.Если 3 не существует, то должно произойти что-то еще , иначе результаты не будут возвращены.

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