如何用R数据帧列中的先前值填充NA值?

要用下一个和上一个值填充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