如何在 R 数据框中用上一行的值填充 NA 值?


有时我们会遇到缺失值,这些缺失值可以用上一行的数据来替换,这种情况经常发生在手动记录数据时,负责记录数据的人员由于了解数据特征,只记录了唯一值。但是,如果其他人需要重新使用此数据,则这种做法就毫无意义,我们必须联系相关人员。如果相关人员告诉我们,每一行中的第一个值都可以填充同一列中的所有 NA,那么可以使用 match 函数来实现。

示例

考虑以下数据框 -

x1<-c(rep(1,3),rep(2,5),rep(3,8),rep(4,4))x2<-c(12,NA,NA,15,NA,NA,NA,NA,14,NA,NA,NA,NA,NA,NA,NA,16,NA,NA,NA) df1<-data.frame(x1,x2)
df1

输出

x1 x2
1 1 12
2 1 NA
3 1 NA
4 2 15
5 2 NA
6 2 NA
7 2 NA
8 2 NA
9 3 14
10 3 NA
11 3 NA
12 3 NA
13 3 NA
14 3 NA
15 3 NA
16 3 NA
17 4 16
18 4 NA
19 4 NA
20 4 NA

用上一行的数据替换第 2 列中的 NA -

df1$x2<-df1$x2[match(df1$x1,df1$x1)]
df1

输出

x1 x
1 1 12
2 1 12
3 1 12
4 2 15
5 2 15
6 2 15
7 2 15
8 2 15
9 3 14
10 3 14
11 3 14
12 3 14
13 3 14
14 3 14
15 3 14
16 3 14
17 4 16
18 4 16
19 4 16
20 4 16

让我们再看一个例子 -

y1<-c(rep("A",4),rep("B",4),rep("C",4),rep("D",4),rep("E",4))
y2<-1:20
y3<-c(123,NA,NA,NA,140,NA,NA,NA,142,NA,NA,NA,137,NA,NA,NA,16,NA,NA,NA) df2<-data.frame(y1,y2,y3)
df2

输出

y1 y2 y3
1 A 1 123
2 A 2 NA
3 A 3 NA
4 A 4 NA
5 B 5 140
6 B 6 NA
7 B 7 NA
8 B 8 NA
9 C 9 142
10 C 10 NA
11 C 11 NA
12 C 12 NA
13 D 13 137
14 D 14 NA
15 D 15 NA
16 D 16 NA
17 E 17 16
18 E 18 NA
19 E 19 NA
20 E 20 NA

用上一行的数据替换第 3 列中的 NA -

df2$y3<-df2$y3[match(df2$y1,df2$y1)]
df2

输出

y1 y2 y3
1 A 1 123
2 A 2 123
3 A 3 123
4 A 4 123
5 B 5 140
6 B 6 140
7 B 7 140
8 B 8 140
9 C 9 142
10 C 10 142
11 C 11 142
12 C 12 142
13 D 13 137
14 D 14 137
15 D 15 137
16 D 16 137
17 E 17 16
18 E 18 16
19 E 19 16
20 E 20 16

更新于: 2020-10-08

726 次浏览

开启你的 职业生涯

完成课程获得认证

立即开始
广告