r - 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 的行,而不仅仅是在指定的列中。我究竟做错了什么?有没有更简单的方法来删除这些行?
解决方案
在这里,一个更简单的选择是?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
子集数据时,它仅返回已按列子集的数据的行子集