在R中重新编码具有缺失值的变量

时间:2016-01-15 14:13:42

标签: r

我很难理解为什么我创建虚拟变量的代码不起作用。我的data包含一些NA值,其格式如下:

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年开始等于12月继续上去。我无法理解为什么以下代码无效。

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

2016年1月之后的任何时间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

修改

我可以使用以下

创建我想要的变量
data$SAout <- ifelse(data$Year >= 2014 & data$Month == 12, 1, 0)
data$SAout[is.na(data$SAout)]<-0

但是我不明白为什么第二行代码是必要的。

1 个答案:

答案 0 :(得分:0)

这是因为你试图用2个条件创建一个虚拟变量。

  1. 数据$ year&gt; 2013
  2. 数据$ month == 12
  3. 在你的代码中,它表示年份和月份是否等于12。

    而是尝试以下代码

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