如何在 R 数据框的列中使用最后一次观察值填充 NA?


在数据分析中有多种方法可以填充缺失值,其中一种方法是用数据框同一列中的前一个值填充缺失值。例如,如果我们在数据框 df 中有一列 x,并且此列 x 包含一些 NA 值,那么我们可以用上一行的值填充它们。这可以通过 zoo 包的 na.locf 函数来实现。

考虑以下数据框 -

示例

 现场演示

set.seed(477)
x<-sample(c(0,1,NA),20,replace=TRUE)
y<-sample(c(0:2,NA),20,replace=TRUE)
z<-sample(c(0:5,NA),20,replace=TRUE)
a<-sample(c(7,11,13,NA),20,replace=TRUE)
b<-sample(c(51,NA),20,replace=TRUE)
c<-sample(c(rnorm(2,1,0.05),NA),20,replace=TRUE)
df<-data.frame(x,y,z,a,b,c)
df

输出

  x y z a b c
1 1 1 3 13 51 1.011752
2 NA 1 1 NA NA 1.011752
3 0 0 2 11 NA 1.092852
4 NA 0 4 7 51 1.011752
5 NA 1 5 11 51 NA
6 1 NA 0 7 51 NA
7 0 1 5 11 51 1.092852
8 0 0 5 7 NA 1.011752
9 1 1 3 NA NA 1.092852
10 1 NA 2 7 51 1.011752
11 0 1 3 NA 51 1.011752
12 NA 1 4 11 51 NA
13 1 NA 3 NA NA 1.011752
14 NA 0 5 11 51 1.011752
15 0 NA 0 NA NA NA
16 NA 0 3 7 NA 1.092852
17 NA NA NA NA 51 NA
18 NA 1 3 11 51 1.011752
19 NA NA 0 11 51 NA
20 NA NA 0 11 NA NA

加载 zoo 包并用同一列中的最后一次观察值替换 NA 值 -

示例

library(zoo)
na.locf(df)

输出

  x  y z  a  b     c
2 1 1 4  7  51  1.031294
3 0 2 3  7  51  1.031294
4 0 2 2  13  51  1.031294
5 0 0 3  13  51  0.954332
6 0 0 2  13  51  1.031294
7 1 2 2  13  51  1.031294
8 1 1 5  13  51  0.954332
9 1 1 3  7  51   1.031294
10 1 1 3  7  51  0.954332
11 0 1 0  7  51  0.954332
12 0 1 2  13 51 0.954332
13 1 1 4  7  51  0.954332
14 0 2 4  7  51  0.954332
15 0 0 0  11  51  0.954332
16 0 0 1  13  51 0.954332
17 0 0 0  13  51  0.954332
18 0 2 2  11  51  1.031294
19 0 2 3  7  51   0.954332
20 1 2 3  7  51   0.954332

让我们看看另一个例子 -

示例

 现场演示

v1<-sample(c(rexp(5,1),NA),20,replace=TRUE)
v2<-sample(c(runif(5,1,2),NA),20,replace=TRUE)
v3<-sample(c(rnorm(4,0.95,0.04),NA),20,replace=TRUE)
df_v<-data.frame(v1,v2,v3)
df_v

输出

    v1        v2         v3
1  0.3197994  1.664430  0.9608500
2  0.7260356  1.951135  0.9741401
3  0.2851354  1.951135  0.9741401
4  NA         1.354400  0.9155426
5  0.4840855  1.951135  0.9155426
6  0.7260356  1.927019  0.9155426
7  0.3197994  1.602498  0.9608500
8  0.3197994  1.602498  NA
9  0.7260356  1.951135  NA
10 0.4840855  1.354400  NA
11 NA         1.664430  NA
12 0.7260356  1.927019  NA
13 0.3197994  1.951135  0.9741401
14 0.2851354  1.354400  0.9155426
15 2.3741214  1.602498  0.9290660
16 0.3197994  1.354400  0.9290660
17 0.7260356  1.951135  0.9155426
18 0.3197994  1.354400  0.9608500
19 0.7260356  1.664430  0.9290660
20 NA         1.602498  NA

用同一列中的最后一次观察值替换 NA 值 -

示例

na.locf(df_v)

输出

       v1       v2      v3
1  0.1109255 1.687216 0.9349647
2  0.1109255 1.687216 0.9611297
3  0.1862784 1.025610 0.9405675
4  0.1862784 1.278997 0.9517017
5  0.1109255 1.341934 0.9517017
6  0.1862784 1.687216 0.9517017
7  0.3978860 1.687216 0.9349647
8  0.1862784 1.025610 0.9517017
9 0.6972909 1.687216 0.9405675
10 0.1109255 1.199711 0.9405675
11 0.1109255 1.199711 0.9611297
12 0.6972909 1.199711 0.9349647
13 0.1862784 1.199711 0.9611297
14 0.3978860 1.025610 0.9349647
15 0.6972909 1.341934 0.9349647
16 0.3978860 1.025610 0.9405675
17 0.6972909 1.199711 0.9517017
18 0.1862784 1.687216 0.9517017
19 0.1862784 1.025610 0.9405675
20 0.6972909 1.025610 0.9611297

更新时间: 2020-10-14

415 次浏览

开启你的 职业生涯

通过完成课程获得认证

开始学习
广告

© . All rights reserved.