在任何列中用 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,]
或者我们可以使用 apply
和 MARGIN=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]
.
我有一个包含 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,]
或者我们可以使用 apply
和 MARGIN=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]
.