complete.cases和!is.na之间的区别

时间:2013-07-25 06:15:03

标签: r na

我刚刚发现这个新功能在我看来是改进版的!is.na,可能包含在apply(df, 1)中。我是正确还是以下:

> a<-c(1,2,4,NA,6,8)
> identical(complete.cases(a), !is.na(a))
[1] TRUE

并非总是如此?

2 个答案:

答案 0 :(得分:6)

对于原子矢量,complete.casesis.na将是相同的。对于更复杂的对象,情况并非如此。

例如,对于,data.frame is.na.data.frame将返回与输入相同维度的逻辑矩阵。

test&lt; - data.frame(a,b = 1)

is.na(test)
#          a     b
# [1,] FALSE FALSE
# [2,] FALSE FALSE
# [3,] FALSE FALSE
# [4,]  TRUE FALSE
# [5,] FALSE FALSE
#[6,] FALSE FALSE
complete.cases(test)
# [1]  TRUE  TRUE  TRUE FALSE  TRUE  TRUE

答案 1 :(得分:1)

让我们采用向量r1和矩阵/表r2如下所示并解释结果

> r1
 [1] 11.3 10.4   NA 11.7 10.8 11.7 10.1  9.8 12.1  1.5  1.8
> r2
    speed mxPH mnO2
60 medium 6.60 11.3
61 medium 6.50 10.4
62 medium 6.40   NA
63   high 7.83 11.7
64   high 7.57 10.8
65   high 7.19 11.7
66   high 7.44 10.1
67   high 7.14  9.8
68   high 7.00 12.1
69 medium 7.50  1.5
70 medium 7.50  1.8

is.na和complete.cases对于矢量

的工作方式相同
> **is.na(r1)**
 [1] FALSE FALSE  TRUE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
> **complete.cases(r1)**
 [1]  TRUE  TRUE FALSE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE

现在让我们看看两个命令为二维数据提供的内容

你可以看到is.na对个人价值采取了行动,但是完成了行动的行动

> **is.na(r2)**
   speed  mxPH  mnO2
60 FALSE FALSE FALSE
61 FALSE FALSE FALSE
62 FALSE FALSE  TRUE
63 FALSE FALSE FALSE
64 FALSE FALSE FALSE
65 FALSE FALSE FALSE
66 FALSE FALSE FALSE
67 FALSE FALSE FALSE
68 FALSE FALSE FALSE
69 FALSE FALSE FALSE
70 FALSE FALSE FALSE

> **complete.cases(r2)**
 [1]  TRUE  TRUE FALSE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE