要用下一个和上一个值填充NA值,我们可以使用na.locffromLast = TRUE的zoo包功能。这是一列的情况,如下所示-
x 0 NA NA 1 1 NA 0 1
用下一个和上一个值填充NA值后的输出为-
x 0 0 0 1 1 1 0 1
考虑以下数据帧-
x1<-sample(c(NA,rpois(2,1)),20,replace=TRUE) x2<-sample(c(NA,rpois(2,5)),20,replace=TRUE) df1<-data.frame(x1,x2) df1输出结果
x1 x2 1 0 1 2 NA 6 3 NA NA 4 1 6 5 1 NA 6 NA NA 7 0 6 8 1 1 9 NA 6 10 1 NA 11 1 6 12 NA NA 13 NA 6 14 1 NA 15 1 1 16 NA 6 17 NA 6 18 NA NA 19 1 NA 20 1 6
加载Zoo软件包并用df1中的先前值替换NA值-
library(zoo) na.locf(na.locf(df1),fromLast=TRUE)输出结果
x1 x2 1 0 1 2 0 6 3 0 6 4 1 6 5 1 6 6 1 6 7 0 6 8 1 1 9 1 6 10 1 6 11 1 6 12 1 6 13 1 6 14 1 6 15 1 1 16 1 6 17 1 6 18 1 6 19 1 6 20 1 6
y1<-sample(c(NA,rnorm(2)),20,replace=TRUE) y2<-sample(c(NA,rnorm(2)),20,replace=TRUE) df2<-data.frame(y1,y2) df2输出结果
y1 y2 1 -0.4569616 NA 2 NA -1.014162 3 NA -1.014162 4 -0.4569616 -1.014162 5 -0.4569616 NA 6 0.2828478 1.282601 7 -0.4569616 NA 8 0.2828478 NA 9 0.2828478 -1.014162 10 NA 1.282601 11 0.2828478 -1.014162 12 -0.4569616 1.282601 13 0.2828478 -1.014162 14 NA -1.014162 15 0.2828478 -1.014162 16 NA NA 17 -0.4569616 NA 18 -0.4569616 -1.014162 19 0.2828478 -1.014162 20 NA -1.014162
用df2中的先前值替换NA值-
na.locf(na.locf(df2),fromLast=TRUE)输出结果
y1 y2 2 -0.4569616 -1.014162 3 -0.4569616 -1.014162 4 -0.4569616 -1.014162 5 -0.4569616 -1.014162 6 0.2828478 1.282601 7 -0.4569616 1.282601 8 0.2828478 1.282601 9 0.2828478 -1.014162 10 0.2828478 1.282601 11 0.2828478 -1.014162 12 -0.4569616 1.282601 13 0.2828478 -1.014162 14 0.2828478 -1.014162 15 0.2828478 -1.014162 16 0.2828478 -1.014162 17 -0.4569616 -1.014162 18 -0.4569616 -1.014162 19 0.2828478 -1.014162 20 0.2828478 -1.014162