r - 确定 NA 部分的开始和结束条款

标签 r na

假设我在 R 中有一些数据如下所示:

c(0.11, NA, NA, NA, 2.76, 3.65, NA, NA, NA, NA, 1.56)

我如何有效地提取 NA 值的每个“ block ”的开始和结束项?如果结果是一个数据框,我希望它看起来像这样:

  first.na last.na
1        2       4
2        7      10

我正在努力训练自己避免 for 循环,因为我将对非常大的数据集(大约 1e9 项)和 na 执行此类操作。省略 不是很有帮助。

最佳答案

也许有一个函数可以完成这项工作,但您可以通过以下方式完成:

> z <- c(0.11, NA, NA, NA, 2.76, 3.65, NA, NA, NA, NA, 6)

> z2 <- diff(is.na(c(0, z, 0)))
> data.frame(first.na = which(z2 == 1), last.na = which(z2 == -1)-1)
  first.na last.na
1        2       4
2        7      10

关于r - 确定 NA 部分的开始和结束条款,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7975042/

相关文章:

r - 对子组内 R 数据框中的数据进行排序

r - block 选项 class.output 不适用于错误消息

r - 如果所有值都是 NA,则计算总和或返回 NA 的有效方法

R data.table 多列重新编码/子分配

r - 在矩阵中删除NA/NaN/Inf

r - 用ggmap绘制热图?

r - 仅命名小平面图中的第一个条形

r - 在 Shiny 的网络应用程序中显示错误而不是绘图

如果列中的 NA 数大于 3,则删除数据框的行

r - 用等于0的一行替换变量的所有NA值