假设我在 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/