2016-01-15 5 views
0

У меня возникли трудности с пониманием того, почему мой код для создания фиктивной переменной не работает. Мой data содержит некоторые NA значения и имеет следующий вид:Перекодирование переменной в R с отсутствующими значениями

Year Month Var1 Var2 
2006 9  278 345 
2006 10  251 857 
2006 11  254 678 
.  .  .  . 
.  .  .  . 
2015 12  230 641 
2016 1  647 268 
2016 2  NA 785 
2016 3  NA 419 
.  .  .  . 
.  .  .  . 
2016 6  NA  369 

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

SAout <- ifelse(data$Year<= 2014 & data$Month == 12, 1, 0) 

В любое время после января 2016 года SAout принимает значение NA, которое не имеет никакого смысла для меня, поскольку data$Year еще больше 2014.

SAout 
[1] 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 
[41] 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 
[81] 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 1 0 NA NA NA NA NA NA 

EDIT

Я могу создать переменную я хочу со следующим

data$SAout <- ifelse(data$Year >= 2014 & data$Month == 12, 1, 0) 
data$SAout[is.na(data$SAout)]<-0 

Однако я не понимаю, почему вторая строка кода должна быть необходимой.

+1

Ваше логическое заявление не отражает то, что вы говорите, что хотите. Вы хотите что-то вроде 'ifelse (data $ Year> = 2014 & data $ Month == 12, 1, 0)'. – ytk

+0

Это точный код, который я написал выше. Не так ли? –

+0

У меня была опечатка, извините. Но это тот же код, который я использовал, который дает NA –

ответ

0

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

  1. данные $ год> 2013
  2. данные $ месяц == 12

В вашем коде говорит, что если год и месяц равен 12.

Скорее попробовать следующий код

data$SAout<-ifelse(data$year >=2014 & data$month==12,1,0) 
+0

Извините, у меня была опечатка в моем вопросе. Это та же условная логика, которую я написал, но для февраля 2016 года я получаю NA вместо 0 –

+0

Возможно, убедитесь, что ваши данные являются числовыми ... 'data $ year <-as.numeric (data $ year)' ? –

+0

Да данные $ Год и данные $ Месяц оба являются числовыми –

Смежные вопросы