如何在 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
广告