假设我有一些数据R,如下所示:
c(0.11, NA, NA, NA, 2.76, 3.65, NA, NA, NA, NA, 1.56)
Run Code Online (Sandbox Code Playgroud)
我如何有效地提取每个"块" NA值的开始和结束术语?如果结果是数据框,我希望它看起来像这样:
first.na last.na
1 2 4
2 7 10
Run Code Online (Sandbox Code Playgroud)
我正在努力训练自己避免for循环,因为我将在非常大的数据集(大约1e9项)上进行这种类型的操作,并且na.omit不太有帮助.
也许有一项功能可以完成这项工作,但你可以做到:
> 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
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
106 次 |
| 最近记录: |