有条件地删除缺少数据的行

时间:2018-02-02 12:51:06

标签: r dataframe na boolean-logic

我的数据框有一些缺失值,显示为NA。

例如:

     V1 V2 V3 V4 V5 V6 V7 V8 V9 V10
1    4  3  6  7  2  1  2  3  4   1
2    5  5  4  3  2  1  3  7  6   7  
3    6  6  NA NA NA NA NA NA NA NA
4    5  2  2  1  7  NA NA NA NA NA
5    7  NA NA NA NA NA NA NA NA NA

我想删除包含至少80%缺失数据的行。在这个例子中,它显然是第3行和第5行。我知道如何手动删除行,但我想要一些代码帮助,因为我的原始数据帧包含480个变量和超过1000行,因此用于自动识别和删除行的代码使用> 80%NA数据将非常有用。

提前感谢你

2 个答案:

答案 0 :(得分:3)

您可以使用rowMeans

df = read.table(text='     V1 V2 V3 V4 V5 V6 V7 V8 V9 V10
1    4  3  6  7  2  1  2  3  4   1
                2    5  5  4  3  2  1  3  7  6   7  
                3    6  6  NA NA NA NA NA NA NA NA
                4    5  2  2  1  7  NA NA NA NA NA
                5    7  NA NA NA NA NA NA NA NA NA')

df[rowMeans(is.na(df))<.8,]

输出:

  V1 V2 V3 V4 V5 V6 V7 V8 V9 V10
1  4  3  6  7  2  1  2  3  4   1
2  5  5  4  3  2  1  3  7  6   7
4  5  2  2  1  7 NA NA NA NA  NA

希望这有帮助!

答案 1 :(得分:2)

我们可以在逻辑矩阵上使用rowSums

df1[rowSums(is.na(df1))/ncol(df1) < 0.8,]
#    V1 V2 V3 V4 V5 V6 V7 V8 V9 V10
#1  4  3  6  7  2  1  2  3  4   1
#2  5  5  4  3  2  1  3  7  6   7
#4  5  2  2  1  7 NA NA NA NA  NA