【问题标题】:Replace NA value with first NonNA value of a column in R用 R 中列的第一个 NonNA 值替换 NA 值
【发布时间】:2018-03-11 00:15:22
【问题描述】:

我的数据框 (df) 具有多列 [33] 对于某些列的第一次观察是 NA ,我想用第一个 "Non 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)))]

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

【问题讨论】:

  • 我很难理解您想要的输出的逻辑。为什么z 的第二行的值为 2?为什么y的第二行仍然是<NA>?另外,您是只想将值向前推进,还是可以从最后一个非<NA> 值向上推进?
  • 对不起,我编辑它应该保持不变..第二行应该保持不变,因为我只想更改第一行的值..如果第一行是 Na 然后用第一个 nonNA 更改它价值。
  • df[1, ] <- lapply(df, function(x) na.omit(x)[1L])
  • 对不起,这没有用。

标签: r replace na


【解决方案1】:

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

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))

【讨论】:

  • 太棒了,这就是我想要的。非常感谢
  • 很高兴它有帮助!
猜你喜欢
  • 2016-03-08
  • 1970-01-01
  • 2020-05-18
  • 2015-07-28
  • 1970-01-01
  • 1970-01-01
  • 2021-10-11
  • 1970-01-01
  • 2021-10-24
相关资源
最近更新 更多