如何從一個 R 資料幀中移除 NA,這些資料幀中的 NA 位於不同的位置?


如果 NA 值位於 R 資料幀的不同位置,則無法在基本 R 中輕鬆刪除它們,我們需要一個包來完成這一操作。 解決此問題最好的包是 dplyr,我們可以將 dplyr 的 summarise_each 函式與 na.omit 結合使用,以刪除所有 NA。 但是,如果資料幀中有多列,則所有列中的非 NA 值的數量必須相同。

示例

考慮以下資料幀

動態演示

> x1<-rep(c(NA,2,3),times=c(7,10,3))
> x2<-rep(c(15,NA,24,NA,18),times=c(5,2,5,5,3))
> df1<-data.frame(x1,x2)
> df1

輸出

 x1  x2
1 NA 15
2 NA 15
3 NA 15
4 NA 15
5 NA 15
6 NA NA
7 NA NA
8  2 24
9  2 24
10 2 24
11 2 24
12 2 24
13 2 NA
14 2 NA
15 2 NA
16 2 NA
17 2 NA
18 3 18
19 3 18
20 3 18

載入 dplyr 包並從 df1 中移除 NA

示例

> library(dplyr)
> df1%>%summarise_each(funs(na.omit(.)))

輸出

  x1 x2
1  2 15
2  2 15
3  2 15
4  2 15
5  2 15
6  2 24
7  2 24
8  2 24
9  2 24
10 2 24
11 3 18
12 3 18
13 3 18

我們來看另一個示例

示例

動態演示

> y1<-rep(c(545,NA,524,NA,589,NA,537,NA,541,NA),times=c(2,2,2,2,2,2,2,2,2,2))
> y2<-rep(c(NA,2.1,NA,1.7,NA),times=c(4,4,4,6,2))
> df2<-data.frame(y1,y2)
> df2

輸出

    y1 y2
1  545 NA
2  545 NA
3   NA NA
4   NA NA
5 524 2.1
6 524 2.1
7   NA 2.1
8   NA 2.1
9  589 NA
10 589 NA
11 NA NA
12 NA NA
13 537 1.7
14 537 1.7
15 NA 1.7
16 NA 1.7
17 541 1.7
18 541 1.7
19 NA NA
20 NA NA

從 df2 中移除 NA

> df2%>%summarise_each(funs(na.omit(.)))

輸出

  y1 y2
1  545 2.1
2  545 2.1
3  524 2.1
4  524 2.1
5  589 1.7
6  589 1.7
7  537 1.7
8  537 1.7
9  541 1.7
10 541 1.7

更新於: 06-Nov-2020

235 次瀏覽

啟動您的 職業

完成課程以獲得認證

開始吧
廣告
© . All rights reserved.