代码在指定条件下不过滤数据

时间:2019-02-03 21:38:31

标签: r dplyr

我正在尝试根据变量中存在的一些观察来操纵某些数据

我有以下代码:

beg.new1     <-c(1,2,3,1,2,3,0,0)
 dive_type1<-c('stocked',   'stocked',  'stocked',  'stocked',   
'stocked',  'stocked',  'stocked',  'stocked')

dt<-data.frame(beg.new1, dive_type1)

dt%>%
 mutate_all(as.character)%>%
  mutate(beg.new1=case_when(beg.new1 %in% c('3','4') & dive_type1=="Pre- 
stocking" |dive_type1=="Prestocking" ~ '3', 
                               beg.new1 %in% c('0', '1', '2')~ '0',
                               TRUE~as.character(beg.new1))) 

我希望它不会返回任何数据,因为此时在数据中未观察到“预库存”和“预库存”。我正在尝试过滤数据,以使beg.new1'3'仅在潜水类型'Prestocking'等下返回。但是,R在'stocked'下返回beg.new1'3'!任何帮助将不胜感激

1 个答案:

答案 0 :(得分:1)

您可以将其改写为:

dt %>%
  mutate_all(as.character) %>%
  mutate(
    beg.new1 = case_when(
      beg.new1 %in% c('3','4') & dive_type1 %in% c("Pre-stocking", "Prestocking")  ~ '3',
      beg.new1 %in% c('0', '1', '2') | (beg.new1 %in% c('3', '4') & dive_type1 == "stocked") ~ '0',
      TRUE ~ beg.new1
      )
    ) 

输出:

  beg.new1 dive_type1
1        0    stocked
2        0    stocked
3        0    stocked
4        0    stocked
5        0    stocked
6        0    stocked
7        0    stocked
8        0    stocked

问题是您没有指定在dive_type1等于stocked并且第一列中的值大于2的情况下会发生什么;因此,这是通过TRUE处理的,即保留了原始值。