我目前正在创建一个虚拟变量来检查数据分析的合格性。我想创建一个额外的因子变量来指示不合格的原因。但是,当对两个变量使用相同的逻辑运算符时,我似乎无法获得匹配的结果。
第一个变量是虚拟:
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
- 计数。
如果有必要,我可以提供数据,但我认为只有完整的数据集才有意义。也许有人可以指出我在数据中可以寻找的任何不规则性?我真的很茫然。