如何在 R 資料框中,基於另一列,如果只有一行非 NA 值,則用該非 NA 值替換所有 NA 值?


如果在 R 資料框中某一列只有一個非 NA 值,並且還有一列是分類變數,那麼我們可能希望用這個非 NA 值來替換所有 NA 值。為此,我們可以按照以下步驟操作:

  • 首先,建立一個數據框
  • 然後,利用 base R 的 min 函式和 dplyr 包的 mutate 函式,將 NA 值替換為非 NA 值。

建立資料框

讓我們建立一個如下所示的資料框:

 線上演示

Grp<-rep(LETTERS[1:4],each=5)
Response<-rep(c(1,NA,3,NA,5,NA,10,NA),times=c(1,4,1,4,1,4,1,4))
df<-data.frame(Grp,Response)
df

執行上述指令碼後,會生成以下輸出(由於隨機化,此輸出在您的系統上可能會有所不同):

 Grp Response
1 A    1
2 A    NA
3 A    NA
4 A    NA
5 A    NA
6 B    3
7 B    NA
8 B    NA
9 B    NA
10 B   NA
11 C    5
12 C   NA
13 C   NA
14 C   NA
15 C   NA
16 D   10
17 D   NA
18 D   NA
19 D   NA
20 D   NA

基於另一列替換 NA 為非 NA

基於 Grp 列替換 Response 列中的 NA 為非 NA:

Grp<-rep(LETTERS[1:4],each=5)
Response<-rep(c(1,NA,3,NA,5,NA,10,NA),times=c(1,4,1,4,1,4,1,4))
df<-data.frame(Grp,Response)
library(dplyr)
df%>%group_by(Grp)%>%mutate(Response=min(Response,na.rm=TRUE))

輸出

# A tibble: 20 x 2
# Groups: Grp [4]
Grp Response
<chr> <dbl>
1  A    1
2  A    1
3  A    1
4  A    1
5  A    1
6  B    3
7  B    3
8  B    3
9  B    3
10 B    3
11 C    5
12 C    5
13 C    5
14 C    5
15 C    5
16 D    10
17 D    10
18 D    10
19 D    10
20 D    10

更新時間: 2021年8月13日

316 次瀏覽

開啟你的 職業生涯

透過完成課程獲得認證

開始學習
廣告

© . All rights reserved.