使用逻辑运算符来重新编码变量

时间:2017-01-19 14:44:22

标签: r

我目前正在创建一个虚拟变量来检查数据分析的合格性。我想创建一个额外的因子变量来指示不合格的原因。但是,当对两个变量使用相同的逻辑运算符时,我似乎无法获得匹配的结果。

第一个变量是虚拟:

data$elig <- factor(1, 1:2, labels = c("yes", "no"))

我首先将所有行设置为yes,然后使用

重新编码不合格的行
data$elig[data$var1 == 20 | data$var2 > 1998 | 
          (data$var2 == 1998 & as.numeric(data$var3) > 9) |
            (data$var2 == 1998 & is.na(data$var3)) | is.na(data$var4) | 
             is.na(data$var5) | is.na(data$var6)] <- "no"

这为data$elig提供了以下结果:

table(data$elig)
yes   no 
2707  170 

现在我用一些嵌套的ifelses创建第二个变量(顺便说一句,有没有更简单的解决方案来执行此操作?):

data$elig_cat <- ifelse(data$var1 == 20, 1, 
                  ifelse(data$var2 > 1998 | 
                           (data$var2 == 1998 & as.numeric(data$var3) > 9) | 
                           (data$var2 == 1998 & is.na(data$var3)), 2, 
                   ifelse(is.na(data$var2), 3, 
                    ifelse(is.na(data$var4), 4, 
                      ifelse(is.na(data$var5), 5, 
                        ifelse(is.na(data$var6), 6, NA))))))

table(data$elig_cat)只有117个有效计数:

 1  2  4  5 
75 22  9 11 

我的问题是:我是否在任何地方犯了一个简单的错误(虽然我已经找到了我能想到的一切),或者这是我的方法的问题?根据我的理解,第二个表应该有170个有效计数,因为每个使用的逻辑运算符导致第一个变量中的no - 计数。

如果有必要,我可以提供数据,但我认为只有完整的数据集才有意义。也许有人可以指出我在数据中可以寻找的任何不规则性?我真的很茫然。

0 个答案:

没有答案