用于过滤数据帧中可能存在或可能不存在观察值的代码

时间:2019-02-02 23:16:05

标签: r dplyr

我正在尝试制作代码模板来过滤数据。我遇到的问题是存在各种级别的分类数据,如果我使用dplyr函数,则过滤器R如果数据中没有过滤级别,则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的row.names),我认为这是因为pelelts == 3不存在(如果删除此行代码,我会得到数据)。我的问题是我不想要检查的还有什么,因为它会通过子集基础的子集变化的每一个数据集。任何帮助将不胜感激。

2 个答案:

答案 0 :(得分:0)

通过说pelelts == 3来告诉R您想要3。您需要修改代码以捕获其他可接受的条件。如果不存在3,则必须执行其他操作,否则将不会返回任何结果。

答案 1 :(得分:0)

此代码获得了所需的结果,谢谢@ 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