如何在R資料框的特定列中刪除包含NA值的行?


如果我們的資料框中存在缺失資料,如果我們有足夠的資訊瞭解資訊缺失的情況的特徵,則可以替換其中一些資料。但是,如果這些資訊不可用,並且我們找不到合適的替換缺失值的方法,則可以使用`complete.cases`函式以及包含缺失值的列。

示例

考慮以下資料框

線上演示

> set.seed(19991)
> x1<-sample(c(NA,rnorm(5,2,1)),20,replace=TRUE)
> x2<-sample(c(NA,rnorm(5,40,0.87)),20,replace=TRUE)
> x3<-sample(c(NA,rnorm(5,1,0.015)),20,replace=TRUE)
> x4<-sample(c(NA,rnorm(10,5,1.27)),20,replace=TRUE)
> x5<-sample(c(NA,rnorm(8,1,0.20)),20,replace=TRUE)
> df1<-data.frame(x1,x2,x3,x4,x5)
> df1

輸出

     x1        x2       x3        x4        x5
1 0.8287962 39.74094 0.9983586 6.338327 0.8692225
2 1.3167347 NA NA 4.133738 0.8692225
3 3.9911408 38.84212 1.0047761 5.825111 0.8423061
4 0.6426335 39.74094 1.0047761 5.177329 NA
5 1.3167347 NA 0.9963252 5.073915 0.8423061
6 0.8287962 38.84212 0.9963252 5.154073 1.0566156
7 NA 40.36844 0.9927987 NA 0.8423061
8 0.1952913 40.36844 1.0047761 6.338327 NA
9 3.9911408 NA 1.0366262 5.154073 1.1936387
10 0.6426335 39.77818 0.9927987 5.177329 0.8557775
11 NA NA 1.0047761 7.216787 0.9506370
12 NA 38.84212 0.9983586 NA 0.8423061
13 1.3167347 39.77818 0.9963252 5.825111 0.8557775
14 0.8287962 39.77818 1.0366262 5.177329 NA
15 0.1952913 NA 0.9927987 5.073915 0.8692225
16 0.1952913 38.84212 1.0366262 5.154073 0.8286973
17 0.1952913 38.84212 1.0366262 NA 0.9506370
18 1.3167347 40.36844 0.9983586 NA 1.0566156
19 0.1952913 39.80231 NA 5.073915 NA
20 NA NA 0.9983586 5.073915 0.8557775

刪除df1中第3到5列包含NA的行

示例

> df1[complete.cases(df1[3:5]),]

輸出

       x1       x2      x3        x4      x5
1 0.8287962 39.74094 0.9983586 6.338327 0.8692225
3 3.9911408 38.84212 1.0047761 5.825111 0.8423061
5 1.3167347 NA 0.9963252 5.073915 0.8423061
6 0.8287962 38.84212 0.9963252 5.154073 1.0566156
9 3.9911408 NA 1.0366262 5.154073 1.1936387
10 0.6426335 39.77818 0.9927987 5.177329 0.8557775
11 NA NA 1.0047761 7.216787 0.9506370
13 1.3167347 39.77818 0.9963252 5.825111 0.8557775
15 0.1952913 NA 0.9927987 5.073915 0.8692225
16 0.1952913 38.84212 1.0366262 5.154073 0.8286973
20 NA NA 0.9983586 5.073915 0.8557775

刪除df1中第1到3列包含NA的行

示例

> df1[complete.cases(df1[1:3]),]

輸出

      x1        x2        x3      x4        x5
1 0.8287962 39.74094 0.9983586 6.338327 0.8692225
3 3.9911408 38.84212 1.0047761 5.825111 0.8423061
4 0.6426335 39.74094 1.0047761 5.177329 NA
6 0.8287962 38.84212 0.9963252 5.154073 1.0566156
8 0.1952913 40.36844 1.0047761 6.338327 NA
10 0.6426335 39.77818 0.9927987 5.177329 0.8557775
13 1.3167347 39.77818 0.9963252 5.825111 0.8557775
14 0.8287962 39.77818 1.0366262 5.177329 NA
16 0.1952913 38.84212 1.0366262 5.154073 0.8286973
17 0.1952913 38.84212 1.0366262 NA 0.9506370
18 1.3167347 40.36844 0.9983586 NA 1.0566156

刪除df1中第2到4列包含NA的行

示例

> df1[complete.cases(df1[2:4]),]

輸出

       x1        x2      x3         x4      x5
1 0.8287962 39.74094 0.9983586 6.338327 0.8692225
3 3.9911408 38.84212 1.0047761 5.825111 0.8423061
4 0.6426335 39.74094 1.0047761 5.177329 NA
6 0.8287962 38.84212 0.9963252 5.154073 1.0566156
8 0.1952913 40.36844 1.0047761 6.338327 NA
10 0.6426335 39.77818 0.9927987 5.177329 0.8557775
13 1.3167347 39.77818 0.9963252 5.825111 0.8557775
14 0.8287962 39.77818 1.0366262 5.177329 NA
16 0.1952913 38.84212 1.0366262 5.154073 0.8286973

讓我們來看另一個例子

示例

線上演示

> y1<-sample(c(NA,rpois(5,2)),20,replace=TRUE)
> y2<-sample(c(NA,rpois(5,5)),20,replace=TRUE)
> y3<-sample(c(NA,rpois(5,1)),20,replace=TRUE)
> y4<-sample(c(NA,rpois(5,2)),20,replace=TRUE)
> df2<-data.frame(y1,y2,y3,y4)
> df2

輸出

y1 y2 y3 y4
1 0 2 0 NA
2 6 NA NA NA
3 0 9 1 1
4 6 4 NA 1
5 2 2 0 2
6 2 9 NA NA
7 6 2 0 1
8 2 4 1 NA
9 2 2 1 1
10 6 4 1 2
11 2 2 0 NA
12 6 2 3 1
13 0 4 1 1
14 2 4 1 0
15 2 9 0 1
16 2 2 1 1
17 2 9 NA 1
18 2 9 0 1
19 2 9 1 0
20 NA 2 3 1

示例

> df2[complete.cases(df2[1:3]),]

輸出

y1 y2 y3 y4
1 0 2 0 NA
3 0 9 1 1
5 2 2 0 2
7 6 2 0 1
8 2 4 1 NA
9 2 2 1 1
10 6 4 1 2
11 2 2 0 NA
12 6 2 3 1
13 0 4 1 1
14 2 4 1 0
15 2 9 0 1
16 2 2 1 1
18 2 9 0 1
19 2 9 1 0

示例

> df2[complete.cases(df2[2:4]),]

輸出

y1 y2 y3 y4
3 0 9 1 1
5 2 2 0 2
7 6 2 0 1
9 2 2 1 1
10 6 4 1 2
12 6 2 3 1
13 0 4 1 1
14 2 4 1 0
15 2 9 0 1
16 2 2 1 1
18 2 9 0 1
19 2 9 1 0
20 NA 2 3 1

示例

> df2[complete.cases(df2[c(1,3)]),]

輸出

y1 y2 y3 y4
1 0 2 0 NA
3 0 9 1 1
5 2 2 0 2
7 6 2 0 1
8 2 4 1 NA
9 2 2 1 1
10 6 4 1 2
11 2 2 0 NA
12 6 2 3 1
13 0 4 1 1
14 2 4 1 0
15 2 9 0 1
16 2 2 1 1
18 2 9 0 1
19 2 9 1 0

更新於:2020年11月21日

1K+ 次瀏覽

啟動您的職業生涯

完成課程獲得認證

開始學習
廣告
© . All rights reserved.