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