如何在 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
广告
数据结构
网络
关系数据库管理系统
操作系统
Java
iOS
HTML
CSS
Android
Python
C 编程
C++
C#
MongoDB
MySQL
Javascript
PHP