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