2011-11-02 91 views
3

的开始和结束的条款比方说,我在R一些数据,看起来像这样:识别NA部分

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

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

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

我想训练自己避免for循环,因为我会在非常大的数据集做这种类型的操作(大约1e9的条款)和na.omit不是很有帮助。

回答

5

也许有做这项工作的功能,但你可以这样做:

> 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 
+0

+1进行填充。 – Ryogi