缺失值的指示变量
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 == 1
和 FALSE == 0
的计算结果都是 TRUE
,这就是为什么您的列中填满了 TRUE。如果你在 R 控制台中输入 TRUE == 1
或 FALSE == 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)
我需要在我的 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 == 1
和 FALSE == 0
的计算结果都是 TRUE
,这就是为什么您的列中填满了 TRUE。如果你在 R 控制台中输入 TRUE == 1
或 FALSE == 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)