我有一个这样的数据框
df <- data.frame(v1 = 10:14, v2 = c(NA, 1, NA, 3, 6), v3 = c(1, NA, NA, 9, 4))
v1 v2 v3
1 10 NA 1
2 11 1 NA
3 12 NA NA
4 13 3 9
5 14 6 4
我现在想用前一列的值填充NA,所以它看起来像这样:
v1 v2 v3
1 10 10 1
2 11 1 1
3 12 12 12
4 13 3 9
5 14 6 4
我知道如何手动执行此操作,就像这样:
df$v2 <- ifelse(is.na(df$v2), df$v1, df$v2)
如何对包含许多列的完整数据框自动执行此操作?
5条答案
按热度按时间ni65a41a1#
您可以从
tidyr
使用fill
来执行此操作:结果:
注:
基本上,我转置了
df
,向下填充每一列,然后将其转置回原始方向jutyujz02#
这将跨NA列的条纹传播值。如果你不想这样,只需颠倒for循环声明中的索引顺序。
2skhul333#
另一个使用
Reduce
和ifelse
的选项:j2qf4p5b4#
您可以使用
apply
,但请注意,输出将是一个矩阵a7qyws3x5#
通过使用
zoo
na.locf