缺失值的指示变量

Indicator Variable for Missing Values

我需要在我的 wbpol 数据集中创建一个名为 wbpol$missing 的新列。

如果该行的任何其他列中有 NA,则此列将显示 1,如果该行的其他列中没有 NA,则此列将显示 0。

这是我当前的代码:

wbpol$missing<-ifelse(apply(wbpol, 1, anyNA), TRUE == 1, FALSE == 0)

然而,当我 运行 代码时,我得到的只是 wbpol$missing 以显示“TRUE”。如果其他行中有 NA,我需要它说 1,如果没有,我需要它说 0。

我该怎么做?

对于 ifelse 语句,如果第一个参数中的语句为 true 或 false,则第二个和第三个参数应该分别是您要分配的值。

在这种情况下,您已将表达式 TRUE == 1 设置为在语句为真时计算,表达式 FALSE == 0 在语句为假时计算。但是 TRUE == 1FALSE == 0 的计算结果都是 TRUE,这就是为什么您的列中填满了 TRUE。如果你在 R 控制台中输入 TRUE == 1FALSE == 0 就可以看到这个。

相反,只需表明您希望值 1 和 0 在语句为真或假时分别被 returned。例如,如果语句为真,则以下将 return 1,如果语句为假,则为 0:

wbpol$missing<-ifelse(apply(wbpol, 1, anyNA), 1, 0)

apply 处理大数据时可能会变慢。更好的方法是查找缺失值中 rowMeans 大于零的位置。

dat$miss <- +(rowMeans(is.na(dat)) > 0)
dat
   V1 V2 V3 V4 V5 miss
1   1  1 NA  1  1    1
2   1  1  1  1  1    0
3  NA  1  1  1  1    1
4   1 NA  1  1  1    1
5  NA NA  1 NA  1    1
6   1 NA  1  1  1    1
7   1 NA NA  1 NA    1
8   1  1  1  1  1    0
9   1  1 NA  1 NA    1
10  1  1  1  1  1    0
11  1  1  1 NA  1    1
12  1  1  1  1  1    0
13  1  1  1  1  1    0
14  1 NA  1 NA  1    1
15  1  1  1  1  1    0
16  1 NA  1  1  1    1
17  1 NA  1  1  1    1
18 NA  1  1  1  1    1
19  1  1  1  1  1    0
20 NA  1  1  1 NA    1

警告:如果您准备采用虚拟变量调整方法来解释缺失数据,您应该知道您将得到有偏见的结果。阅读 Allison, Paul D. 2002。缺失数据。 SAGE 出版公司 。改用多重插补或非参数插补或咨询当地统计学家。


数据:

dat <- matrix(1, 20, 5)
set.seed(42)
dat[sample(length(dat), length(dat)*.2)] <- NA
dat <- as.data.frame(dat)