将NA值替换为R中列的第一个NonNA值

时间:2018-03-11 00:15:22

标签: r replace na

我有数据框(df)有多列[33],对于某些列,第一次观察是NA,我想要替换第一行" Na"价值与第一"非Na"值。 如果这是我的数据数据框:

x   y  z   zz
1   na na  na
2   na na  na 
3   S  3   na 
4   d  4   7

我希望我的数据框

x   y  z   zz
1   S  3   7
2   na na  na
3   S  3   na
4   d  4   7

我使用以下代码来获取单个列的结果,但是如何为多列动态执行此操作。

df$y[1] <- df$y[min(which(!is.na(df$y)))]

任何帮助将不胜感激。谢谢。

1 个答案:

答案 0 :(得分:0)

你的意思是拥有这样的东西吗?

df[1,] <- apply(df, 2, function(x) trimws(x[min(which(!is.na(x)))]))

输出为:

  x    y    z   zz
1 1    S    3    7
2 2 <NA> <NA> <NA>
3 3    S    3 <NA>
4 4    d    4    7

示例数据:

df <- structure(list(x = 1:4, y = c(NA, NA, "S", "d"), z = c(NA, NA, 
3L, 4L), zz = c(NA, NA, NA, 7L)), .Names = c("x", "y", "z", "zz"
), class = "data.frame", row.names = c(NA, -4L))