在任何列中用 NA(缺失值)对所有行进行子集化

Subsetting all Rows with NA (Missing Value) in any of the columns

我有一个包含 3000 个 obs 的数据集 (teleco),其中有许多 (332) 个缺失值 (NA)。当我尝试将所有缺失值子集化到另一个数据框中时,奇怪的是我最终得到了 3745 obs。

clean = na.omit(teleco)
new = teleco[is.na(teleco[1:19])==TRUE, ]

干净 - 19 个变量的 2668 个观测值

新 - 19 个变量的 3745 个观测值

teleco - 19 个变量的 3000 个观测值

我确定我做错了什么。有人可以帮忙吗?

如果我们需要对至少有一个 NA 的行进行子集化,我们可以在逻辑矩阵 (is.na(teleco)) 上使用 rowSums 创建索引,并将其转换为逻辑矩阵向量 (!=0).

teleco[rowSums(is.na(teleco))!=0,]

或者我们可以使用 applyMARGIN=1 来创建一个逻辑向量。

teleco[apply(is.na(teleco), 1, any),]

数据

set.seed(24)
teleco <- as.data.frame(matrix(sample(c(NA,0:10), 20*5, replace=TRUE), ncol=5))

我更喜欢@akrun 的解决方案,但这里有一个应该给出相同结果的替代方案:

teleco[unique(which(is.na(teleco), arr.ind=T)[,1]),]

想法是使用 which() 结合选项 arr.ind=TRUE 提取具有 NA 的行号。由于我们对哪些列包含 NA 的信息不感兴趣,我们 select 仅 which() 提供的输出的第一个值 [,1].