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