首页 > 解决方案 > na.omits 删除任何列中具有 NA 的所有行,而不仅仅是指定列

问题描述

考虑以下对象(数据):

   collection.number weight bill.length bill.height bill.width
1         XXXXX29985   11.5       16.10        4.07       6.74
2         XXXXX29986   11.6       17.43        4.17       6.39
3         XXXX391828     NA       14.85        4.02       7.19
4         XXXX328017     NA       16.92        3.38         NA
5            XX28024     NA       14.79          NA       6.00
6            XX28095     NA       15.80        4.17       6.54

我正在尝试删除以下任何列中具有 NA 的所有行:bill.length、bill.height 和 bill.width。

当我做:

data.filtered<-na.omit(data[3:5])

或者

data.filtered<-na.omit(data, cols = c("bill.length","bill.height","bill.width"))

它删除所有在“权重”列中具有 NA 的行,而不仅仅是在指定的列中。我究竟做错了什么?有没有更简单的方法来删除这些行?

标签: r

解决方案


在这里,一个更简单的选择是?complete.cases通过描述接受参数

一系列向量、矩阵和数据帧。

并返回一个逻辑向量,可用作对数据集进行子集化的行索引

data[complete.cases(data[3:5]),]
#  collection.number weight bill.length bill.height bill.width
#1        XXXXX29985   11.5       16.10        4.07       6.74
#2        XXXXX29986   11.6       17.43        4.17       6.39
#3        XXXX391828     NA       14.85        4.02       7.19
#6           XX28095     NA       15.80        4.17       6.54

na.omit通过删除其中一列具有任何 NA 的行来返回数据集本身。因此,当我们应用于na.omit子集数据时,它仅返回已按列子集的数据的行子集


推荐阅读