Код не фильтрует данные при определенных условиях - PullRequest
0 голосов
/ 04 февраля 2019

Я пытаюсь манипулировать некоторыми данными на основе некоторых наблюдений, существующих в переменной

У меня есть следующий код:

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' возвращался только под dive_type 'Предварительный склад' и т. Д. Однако R возвращает beg.new1 '3' под 'stocked'!Любая помощь будет оценена

1 Ответ

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

Вы можете перефразировать это как:

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, то есть было сохранено исходное значение.

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