使用"which()"比较两个数据集时为什么R找不到"NA"

T X*_*T X 2 r

我有两个数据集,我想知道它们的元素在哪个位置不同,所以我使用下面的代码:

在此示例中,a1和a2是要比较的数据集."a2"有两个不同的元素:一个是[3,1],另一个是[8,2],它是"NA".

a1 <- data.frame(num = 1:8, lib = letters[1:8])
a2 <- a1
a2[[3,1]] <- 2
a2[[8,2]] <- 2
a1; a2
which(a1 != a2, arr.ind = TRUE)
Run Code Online (Sandbox Code Playgroud)

但是,which()函数只能找到一个差异"[3,1]".似乎找不到"NA"的区别.我怎样才能找到[3,1]和[8,2]的差异?

Ron*_*hah 11

那是因为当比较的NA是什么时NA,它不会返回,TRUE或者FALSE因此没有被捕获which

"h" != NA
#[1] NA
Run Code Online (Sandbox Code Playgroud)

我们可能需要额外检查NA元素

which((a1 != a2) | (is.na(a1) != is.na(a2)), arr.ind = TRUE) 

#     row col
#[1,]   3   1
#[2,]   8   2
Run Code Online (Sandbox Code Playgroud)

  • +1此外,我发现此博客文章有助于理解NA在R中的功能。https://blog.revolutionanalytics.com/2016/07/understanding-na-in-r.html (2认同)