如何在R中将缺失值的位置移到数据框的末尾?


在大多数数据科学项目中,我们需要处理缺失值,这些缺失值可能出现在任何位置。我们可能希望更改这些缺失值的位置,并将它们移到数据框列的末尾。这可以通过lapply函数实现,如下例所示。

示例1

考虑以下数据框:

在线演示

> x1<-sample(c(NA,rpois(2,1)),20,replace=TRUE)
> x2<-sample(c(NA,rpois(2,1)),20,replace=TRUE)
> x3<-sample(c(NA,rpois(2,1)),20,replace=TRUE)
> df1<-data.frame(x1,x2,x3)
> df1

输出

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

将缺失值移到df1的末尾:

> df1[]<-lapply(df1,function(x) c(x[!is.na(x)], x[is.na(x)]))
> df1

输出

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

示例2

在线演示

> y1<-sample(c(NA,rnorm(3)),20,replace=TRUE)
> y2<-sample(c(NA,rnorm(3)),20,replace=TRUE)
> y3<-sample(c(NA,rnorm(3)),20,replace=TRUE)
> df2<-data.frame(y1,y2,y3)
> df2

输出

   y1           y2         y3
1  NA         NA           NA
2  1.3030960  NA         0.6250597
3  NA        -0.2795437  NA
4  NA        -0.2795437  0.6250597
5  NA         1.2997792  0.6250597
6  1.3030960  1.2997792  NA
7  0.5949615 -0.2795437  NA
8  0.1149380  NA         0.6250597
9  0.5949615 -0.2795437  NA
10 NA         NA        -0.6412672
11 NA         1.2997792 -0.6412672
12 1.3030960 -0.2795437 -0.6412672
13 0.1149380  1.2997792  NA
14 1.3030960 -0.2795437  NA
15 0.1149380 -0.2795437  0.6250597
16 0.1149380  NA         1.3271716
17 NA        -0.2795437 -0.6412672
18 NA         1.2481138  NA
19 0.5949615  1.2481138  NA
20 NA        -0.2795437  0.6250597

将缺失值移到df2的末尾:

> df2[]<-lapply(df2,function(x) c(x[!is.na(x)], x[is.na(x)]))
> df2

输出

     y1          y2         y3
1  1.3030960  -0.2795437  0.6250597
2  1.3030960  -0.2795437  0.6250597
3  0.5949615   1.2997792  0.6250597
4  0.1149380   1.2997792  0.6250597
5  0.5949615  -0.2795437 -0.6412672
6  1.3030960  -0.2795437 -0.6412672
7  0.1149380   1.2997792 -0.6412672
8  1.3030960  -0.2795437  0.6250597
9  0.1149380   1.2997792  1.3271716
10 0.1149380  -0.2795437 -0.6412672
11 0.5949615  -0.2795437  0.6250597
12 NA         -0.2795437  NA
13 NA          1.2481138  NA
14 NA          1.2481138  NA
15 NA         -0.2795437  NA
16 NA          NA         NA
17 NA          NA         NA
18 NA          NA         NA
19 NA          NA         NA
20 NA          NA         NA

更新于:2021年3月5日

99 次浏览

开启你的职业生涯

完成课程获得认证

开始学习
广告