如何在 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 次浏览

开启你的 职业生涯

通过完成课程获得认证

开始学习
广告